このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/121
#  [1] 授業単元:情報  
#  [2] 問題文(含コード&リンク):整数i, j,実数x,y それぞれに任意の値を入力し、  
#  i+j, i-j, およびx+y,x/yを計算し、その結果を出力するプログラムを作成せよ  
#  入力にはscanf関数、出力にはprintf関数を用いること  
#  出力結果は  
#  i+j=計算結果の数字  
#  i-j=計算結果の数字  
#  x*y=計算結果の数字  
#  x/y=計算結果の数字  
#  

'整数i, j,実数x,y それぞれに任意の値を入力し i+j, i-j, およびx+y,x/yを計算し、その結果を出力する' :-
        '整数i, j,実数x,y それぞれに任意の値を入力し'(_整数i,_整数j,_実数x,_実数y),
        'i+j, i-j, およびx+y,x/yを計算し'(_整数i,_整数j,_実数x,_実数y,_計算結果ならび),
        その結果を出力する(_計算結果ならび).

'整数i, j,実数x,y それぞれに任意の値を入力し'(_整数i,_整数j,_実数x,_実数y) :-
        催促付き整数入力('整数iを入力してください : ',_整数i),
        催促付き整数入力('整数jを入力してください : ',_整数j),
        催促付き整数入力('実数xを入力してください : ',_実数x),
        催促付き整数入力('実数yを入力してください : ',_実数y),!.

'i+j, i-j, およびx+y,x/yを計算し'(_整数i,_整数j,_実数x,_実数y,_計算結果ならび) :-
        findall(_計算結果,(
                    append(_,[_式|_],[_整数i+_整数j,_整数i-_整数j,_実数x*_実数y,_実数x/_実数y]),
                    _値 is _式,
                    write_formatted_atom(_計算結果,'%t=%t',[_式,_値])),
                _計算結果ならび).

その結果を出力する([]) :- !.
その結果を出力する([_計算結果|R]) :-
        write_formatted('%t\n,[_計算結果]),
        その結果を出力する(R).

催促付き整数入力(_催促文,_整数) :-
        write_formatted('%t',_催促文]),
        get_line(Line),
        催促付き整数入力診断(Line,_整数),!.
催促付き整数入力(_催促文,_整数) :- 催促付き整数入力(_催促文,_整数).

催促付き整数入力診断(Line,_整数) :-
        atom_to_term(Line,_整数,_),
        integer(_整数),!.
催促付き整数入力診断(Line,_整数) :-
        write_formatted('入力された %t から整数を得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

催促付き実数入力(_催促文,_実数) :-
        write_formatted('%t',_催促文]),
        get_line(Line),
        催促付き実数入力診断(Line,_実数),!.
催促付き実数入力(_催促文,_実数) :- 催促付き実数入力(_催促文,_実数).

催促付き実数入力診断(Line,_実数) :-
        atom_to_term(Line,_実数,_),
        integer(_実数),!.
催促付き実数入力診断(Line,_実数) :-
        write_formatted('入力された %t から実数を得られませんでした。再入力をお願いします。\n',[Line]),
        fail.