このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/802
#  [1] 授業単元:if else 
#  [2] 問題文(含コード&リンク): 
#  三角形の3辺の長さ a,b,c をfloat型で入力し, 
#  直角三角形,鈍角三角形,鋭角三角形のどれであるかを判定するプログラムを作成しなさい。 
#  なお、if文をよういること 
#  

'三角形の3辺の長さをfloat型で入力し,直角三角形,鈍角三角形,鋭角三角形のどれであるかを判定する'(_判定) :-
        '三角形の3辺の長さfloat型で入力し'(_辺_1,_辺_2,_辺_3),

        '直角三角形,鈍角三角形,鋭角三角形のどれであるかを判定する'(_辺_1,_辺_2,_辺_3,_判定).

'三角形の3辺の長さをfloat型で入力し'(_辺_1,_辺_2,_辺_3) :-
        write('三角形の3 辺の長さを浮動小数点数で入力してください。 '),
        findall(_辺,(
                   append(Ln,[_|_],[_,_,_]),
                   length([_|Ln],_n),
                   辺の長さの入力(_n,_辺)),
                [_辺_1,_辺_2,_辺_3]).

辺の長さの入力(_n,_辺) :-
        writef('辺[%t] : ',[_n]),
        get_line(Line),
        辺の長さの入力診断(Line,_辺),!.
辺の長さの入力(_n,_辺) :-
        辺の長さの入力(_n,_辺).

辺の長さの入力診断(Line,_辺) :-
        atom_to_term(Line,_辺,_),
        float(_辺),
        _辺 > 0.0,!.        
辺の長さの入力診断(Line,_辺) :-
        writef('入力された %t からは三角形の辺にあたる情報が得られません。再入力をお願いします。\n',[Line]),
        fail.

'直角三角形,鈍角三角形,鋭角三角形のどれであるかを判定する'(_辺_1,_辺_2,_辺_3,_判定) :-
        '二つの短辺と長辺に分ける'([_辺_1,_辺_2,_辺_3],[_短辺_1,_短辺_2],_長辺),
        '直角三角形、鈍角三角形、鋭角三角形の判定'(_短辺_1,_短辺_2,_長辺,_判定).

'二つの短辺と長辺に分ける'([_長辺|R],R,_長辺) :-
        \+((member(_辺,R),_辺 > _長辺)),!.
'二つの短辺と長辺に分ける'([_辺|R1],[_辺|R2],_長辺) :-
        '二つの短辺と長辺に分ける'(R1,R2,_長辺).

'直角三角形、鈍角三角形、鋭角三角形の判定'(_短辺_1,_短辺_2,_長辺,直角三角形) :-
        (_長辺 * _長辺) =:= (_短辺_1 * _短辺_1) + (_短辺_2 * _短辺_2),!.
'直角三角形、鈍角三角形、鋭角三角形の判定'(_短辺_1,_短辺_2,_長辺,鋭角三角形) :-
        (_長辺 * _長辺) < (_短辺_1 * _短辺_1) + (_短辺_2 * _短辺_2),!.
'直角三角形、鈍角三角形、鋭角三角形の判定'(_短辺_1,_短辺_2,_長辺,鈍角三角形) :-
        (_長辺 * _長辺) > (_短辺_1 * _短辺_1) + (_短辺_2 * _短辺_2),!.