このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/423
#  [1] 授業単元:C  
#  [2] 問題文(含コード&リンク):  
#  3つの異なる値の実数を入力させる。それがどんな順番で入力されたとしても、昇順に並び替えて表示するプログラムを作成しなさい 
#  なお、プログラムの末尾には、このプログラムが正しいことを確認するためには、何パターンのデータを試す必要があるかを考え、必要なテストを行った結果を記録しなさい  
#  

3つの異なる値の実数を入力させる。それがどんな順番で入力されたとしても、昇順に並び替えて表示する :-
        3つの異なる値の実数を入力させる(V1,V2,V3),
        '3sort'(V1,V2,V3,_1,_2,_3),
        writef('%t %t %t\n',[_1,_2,_3]).

'3sort'(_1,_2,_3,_1,_2,_3) :- _1 =< _2,_2 =< _3,!.
'3sort'(_1,_2,_3,_1,_3,_2) :- _1 =< _3,_3 =< _2,!.
'3sort'(_1,_2,_3,_2,_1,_3) :- _2 =< _1,_1 =< _3,!.
'3sort'(_1,_2,_3,_2,_3,_1) :- _2 =< _3,_3 =< _1,!.
'3sort'(_1,_2,_3,_3,_1,_2) :- _3 =< _1,_1 =< _2,!.
'3sort'(_1,_2,_3,_3,_2,_1) :- _3 =< _2,_2 =< _1,!.

3つの異なる値の実数を入力させる(V1,V2,V3) :-
        実数を入力する(1,[],V1),
        実数を入力する(2,[V1],V2),
        実数を入力する(3,[V1,V2],V3),!.

実数を入力する(_N番目,L,V) :-
        writef('実数を入力してください[%t番目] : ',[_N番目]),
        get_line(Line),
        実数入力検査(Line,L,V),!.
実数を入力する(_N番目,L,V) :- 実数を入力する(_N番目,L,V).

実数入力検査(Line,L,_実数) :-
        atom_to_term(Line,_実数,_),
        実数入力検査のニ(Line,L,_実数),!.
        
実数入力検査のニ(Line,L,_実数) :-
        float(_実数),
        \+(append(_,[_実数|_],L)),!.
実数入力検査のニ(Line,L,_実数) :-
        \+(float(_実数)),!,
        writef('入力された %t からは実数値が得られません。\n',[Line]),
        fail.
実数入力検査のニ(Line,L,_実数) :-
        float(_実数),!,
        append(_,[_実数|_],L),
        writef('実数 %t は既に入力されています\n',[_実数]),
        fail.

テスト :-
        テストパターン(N,_,[V1,V2,V3],L,[X1,X2,X3]),
        L = [V1,V2,V3],
        \+('3sort'(V1,V2,V3,X1,X2,X3)),
        writef('no%t, Error %t,%t,%t\n',[V1,V2,V3]),
        fail.
テスト.

テストパターン(1,(1 < 2,2 < 3),[1.0,2.0,3.0],[A,B,C],[A,B,C]).
テストパターン(2,(1 < 3,3 < 2),[1.0,3.0,2.0],[A,C,B],[A,B,C]).
テストパターン(3,(2 < 1,1 < 3),[2.0,1.0,3.0],[B,A,C],[A,B,C]).
テストパターン(4,(2 < 3,3 < 1),[2.0,3.0,1.0],[B,C,A],[A,B,C]).
テストパターン(5,(3 < 1,1 < 2),[3.0,1.0,2.0],[C,A,B],[A,B,C]).
テストパターン(6,(3 < 2,2 < 1),[3.0,2.0,1.0],[C,B,A],[A,B,C]).
テストバターン(7,(1 = 2,2 < 3),[1.0,1.0,3.0],[A,A,C],[A,A,C]).
テストパターン(8,(1 = 3,3 < 2),[1.0,1.0,2.0],[A,A,B],[A,B,A]).
テストパターン(9,(2 = 3,3 < 1),[2.0,2.0,1.0],[B,B,A],[A,B,B].
テストパターン(10,(1 < 2,2 = 3),[1.0,2.0,2.0],[A,B,B],[A,B,B]).
テストパターン(11,(2 < 1,1 = 3),[2.0,1.0,1.0],[B,A,A],[A,B,B]).
テストパターン(12,(3 < 2,2 = 1),[3.0,1.0,1.0],[C,A,A],[A,A,C]).
テストパターン(13,(1 = 2,2 = 3),[A,A,A],[A,A,A]).