このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1370255305/329
#  [1] 授業単元:ソート 
#  [2] 問題文(含コード&リンク): 
#   
#  次の条件を満たす関数を作ってください。 
#   
#  第1引数はint型の配列。 
#  第2引数はint型で第1引数の配列の要素数。 
#  第3引数はint型の値。 
#   
#  配列内の要素を並び替えて、第3引数の値より小さなものが配列の最初の方に位置するようにし、 
#  その次に第3引数の値と同じものが位置するようにし、その次に第3引数の値より大きなものが位置するように 
#  してください。 
#   
#  戻り値は、第3引数の値より小さなもののうち最も後方のインデックスをstruct Pairのfirstにセットし、 
#  第3引数の値と同じもののうち、最も後方のインデックスをstruct Pairのsecondにセットして 
#  struct Pair型の値を返してください。 
#   
#  struct Pair { 
#  int first; 
#  int second; 
#  }; 
#   
#  できるだけ速く処理できるよう実装を工夫してください。 
#   
#  

'次の条件を満たす関数を作ってください。 

第1引数はint型の配列。
第2引数はint型で第1引数の配列の要素数。
第3引数はint型の値。

配列内の要素を並び替えて、第3引数の値より小さなものが配列の最初の方に位置するようにし、
その次に第3引数の値と同じものが位置するようにし、その次に第3引数の値より大きなものが位置するように
してください。

戻り値は、第3引数の値より小さなもののうち最も後方のインデックスをstruct Pairのfirstにセットし、
第3引数の値と同じもののうち、最も後方のインデックスをstruct Pairのsecondにセットして
struct Pair型の値を返してください。 '(_ならび,_要素数,_第3引数の値,_第3引数の値より小さなもののうち最も後方のインデックス,_第3引数の値と同じのもののうち最も後方のインデックス) :-
        findall(_nth1,(
                    nth1(_nth,_ならび,A),
                    A @< _第3引数の値),
                L1),
        findall(_第3引数の値,(
                    nth1(_nth1,_ならび,_第3引数の値)),
                L2),
        findall(A,(
                    nth1(_nth1,_ならび,A),
                    A @> _第3引数の値),
                L3),
        append(L1,L2,L3,_並び替えたならび),
        last(L1,_第3引数の値より小さなもののうち最も後方のインデックス),
        last(L2,_第3引数の値と同じのもののうち最も後方のインデックス),