このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/812
#  [1] 授業単元: 何かの授業ではないんですが 
#  [2] 問題文(含コード&リンク): 
#  n個の要素を持つintの配列にランダムな順序で整数が入っている。 
#  このときk(0 <= k <= n-1)番目に小さい要素を見つけるプログラムを書け。 
#  

'n個の要素を持つintの配列にランダムな順序で整数が入っている。このときk(0 <= k <= n-1)番目に小さい要素を見つける'(_n,_k,_k番目に小さい要素) :-
        'n個の要素を持つintの配列にランダムな順序で整数が入っている。'(_n,L),
        整列(L,L1),
        lenth([_|L0],_k),
        append(L0,[_k番目に小さい要素|_],L1).

'n個の要素を持つintの配列にランダムな順序で整数が入っている。'(_n,L) :-
        length(L,_n),
        findall(M,(
                    append(_,[_|_],L),
                    M is random(1000)),
                L).

整列([],[]).
整列([A|R1],L) :-
        分割(A,R1,L1,L2),
        整列(L1,L1_2),
        整列(L2,L2_2),
        append(L1_2,[A|L2_2],L).

分割(_,[],[],[]).
分割(A,[B|R1],[B|R2],R3) :-
        A @>= B,
        分割(A,R1,R2,R3).
分割(A,[B|R1],R2,[B|R3]) :-
        A @< B,
        分割(A,R1,R2,R3).