このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/261
#  [1] 授業単元: プログラミング 
#  [2] 問題文: 4つの整数s,m,l,xlを小さい順に並べ替えるプログラムを作成しなさい。 
#        ただし、並び替えをする部分はユーザ定義関数化し、 
#        並び替え後の結果をmain関数で出力するようにすること。 
#  

'4つの整数s,m,l,xlを小さい順に並べ替える'(_s,_m,_l,_xl,_整列した名前ならび) :-
        length(L1,4),
        '整数・名前ならびを小さい順並べ替える'([[_m,m],[_l,l],[_xl,xl]],[[_s,s],_,_,[_s,s]],_整列した値ペアならび),
        名前のみ取り出す(_整列した値ペアならび,_整列した名前ならび).

'整数・名前ならびを小さい順並べ替える'([],[Min,C1,C2,Max],[Min,C1,C2,Max]) :- !.
        C1 @=< C2,!.
'整数・名前ならびを小さい順並べ替える'([],[Min,C1,C2,Max],[Min,C2,C1,Max]) :-
        C1 @>C2,!.
'整数・名前ならびを小さい順並べ替える'([A|R1],[Min,C1,C2,Max],L) :-
        A @< Min,
        var(C1),
        '整数・名前ならびを小さい順並べ替える'(R1,[A,Min,C2,Max],L).
'整数・名前ならびを小さい順並べ替える'([A|R1],[Min,C1,C2,Max],L) :-
        A @< Min,
        var(C2),
        '整数・名前ならびを小さい順並べ替える'(R1,[A,C1,C2,Max],L).
'整数・名前ならびを小さい順並べ替える'([A|R1],[Min,C1,C2,Max],L) :-
        A @> Max,
        var(C1),
        '整数・名前ならびを小さい順並べ替える'(R1,[Min,Max,C2,A],L).
'整数・名前ならびを小さい順並べ替える'([A|R1],[Min,C1,C2,Max],L) :-
        var(C2),
        '整数・名前ならびを小さい順並べ替える'(R1,[Min,C1,A,Max],L).

名前のみ取り出す([],[]) :- !.
名前のみ取り出す([[_,A]|R1],[A|R2]) :-
        名前のみ取り出す(R1,R2).