このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1357191974/159
#  お題:値が奇数のデータだけ昇順にソートする。 
#  例 
#  37,61,86,9,81,50 -> 9,37,86,61,81,50 

'お題:値が奇数のデータだけ昇順にソートする。
例
37,61,86,9,81,50 -> 9,37,86,61,81,50'(_値ならび,_奇数のデータだけ昇順にソートされた値ならび) :-
        奇数のデータだけソートする(_値ならび,_昇順にソートされた奇数データならび),
        奇数のデータだけ昇順に入れ替える(_値ならび,_昇順にソートされた奇数データならび,_奇数のデータだけ昇順にソートされた値ならび).

奇数のデータだけソートする(_値ならび,_昇順にソートされた奇数データならび) :-
        奇数のデータだけ(_値ならび,_奇数のデータならび),
        ソートする(_奇数のデータならび,_昇順にソートされた奇数データならび).

奇数のデータだけ(_値ならび,_奇数のデータならび) :-
        findall(_値,(
                    member(_値,_値ならび),
                    奇数(_値)),_奇数のデータならび).

奇数のデータだけ昇順に入れ替える([],_,[]).
奇数のデータだけ昇順に入れ替える([N1|R1],[N2|R2],[N2|R3]) :-
        奇数(N1),
        奇数のデータだけ昇順に入れ替える(R1,R2,R3).
奇数のデータだけ昇順に入れ替える([N1|R1],R2,[N1|R3]) :-
        偶数(N1),
        奇数のデータだけ昇順に入れ替える(R1,R2,R3).

奇数(N) :-
        1 is N mod 2.

偶数(N) :-
        0 is N mod 2.

ソートする([],[]).
ソートする([_軸要素|R1],L2) :-
        分割(_軸要素,R1,L1_1,L1_2),
        ソートする(L1_1,L2_1),
        ソートする(L1_2,L2_2),
        append(L2_1,[_軸要素|L2_2],L2).

分割(_軸要素,[],[],[]).
分割(_軸要素,[N|R1],[N|R2],R3) :-
        N @=< _軸要素,
        分割(_軸要素,R1,R2,R3).
分割(_軸要素,[N|R1],R2,[N|R3]) :-
        N @> _軸要素,
        分割(_軸要素,R1,R2,R3).