このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/256
#  [1] 授業単元:情報処理概論  
#  [2] 問題文(含コード&リンク): 
#  つると亀が合わせてn匹います。足の数は合わせてmです。 
#  nとmを入力して、つると亀がそれぞれ何匹いるのか求めるプログラムを作りなさい。 
#  もし解がない場合は、その旨を出力するようプログラムすること。 
#  

'つると亀が合わせてn匹います。足の数は合わせてmです。nとmを入力して、つると亀がそれぞれ何匹いるのか求めるプログラムを作りなさい。' :-
        つると亀が合わせてn匹います(_つると亀が合わせてn匹),
        足の数は合わせてmです(_足の数は合わせてm),
        '全部亀だと考えよう。実際の足の数はそれより少ないかもしれない。この全部の中の亀一匹をつる一羽に置き換えると足が2本少なくなる。置き換えた一匹・一羽について2本づつすくなくなるということは差を2で割った数がつるの数だ'(_つると亀合わせてn匹,_足の数合わせてm,_つるの数,_亀の数),
        writef('つるは %t 羽、亀は %t 匹です。\n',[_つるの数,_亀の数]),!.

'全部亀だと考えよう。実際の足の数はそれより少ないかもしれない。この全部の中の亀一匹をつる一羽に置き換えると足が2本少なくなる。置き換えた一匹・一羽について2本づつすくなくなるということは差を2で割った数がつるの数だ'(_つると亀合わせてn匹,_足の数合わせてm,_つるの数,_亀の数) :-
        '全部亀だと考えよう。'(_つると亀合わせて,_全部亀だとした場合の足の数),
        '実際の足の数はそれより少ないかもしれない。'(_全部亀だとした場合の足の数,_足の数合わせてm,_差),
        '置き換えた一匹・一羽について2本づつ少なくなるのだから、差を2で割った数がつるの数だ'(_差,_つるの数),
        亀の数は(_つると亀が合わせてn匹,_つるの数,_亀の数).

'全部亀だと考えよう。'(_つると亀合わせてn匹,_全部亀だとした場合の足の数) :-
        _全部亀だとした場合の足の数 is 4 * _つると亀合わせてn匹.

'実際の足の数はそれより少ないかもしれない。'(_全部亀だとした場合の足の数,_足の数合わせてm,_差)  :-
        _差 is _全部亀だとした場合の足の数 - _足の数合わせてm.

'置き換えた一匹・一羽について2本づつ少なくなるのだから、差を2で割った数がつるの数だ'(_差,_つるの数) :-
        _つるの数 is _差 // 2.

亀の数は(_つると亀が合わせてn匹,_つるの数,_亀の数) :-
        _亀の数 is _つると亀が合わせてn匹 - _つるの数.

つると亀が合わせてn匹います(_つると亀が合わせてn匹) :-
        write('つると亀合わせて何匹いますか? : '),
        get_line(Line),
        つると亀が合わせてn匹入力の診断(Line,_つると亀が合わせてn匹),!.

つると亀が合わせてn匹入力の診断(Line,_つると亀が合わせてn匹) :-
        atom_to_term(Line,_つると亀が合わせてn匹,_),
        integer(_つると亀が合わせてn匹),
        _つると亀が合わせてn匹 > 0,!.
つると亀が合わせてn匹入力の診断(Line,_つると亀が合わせてn匹) :-
        writef('入力された %t からは整数が得られません。再入力をお願いします。\n',[Line]),
        fail.

足の数は合わせてmです(_足の数は合わせてm) :-
        write('足の数は合わせて? : '),
        get_line(Line),
        足の数は合わせてmの診断(Line,_足の数は合わせてm),!.
足の数は合わせてmです(_足の数は合わせてm) :-
        足の数は合わせてmです(_足の数は合わせてm).

足の数は合わせてmの診断(Line,_足の数は合わせてm) :-
        atom_to_term(LIne,_足の数は合わせてm,_),
        integer(_足の数は合わせてm),
        _足の数は合わせてm >= 0,!.
足の数は合わせてmの診断(Line,_足の数は合わせてm) :-
        writef('入力された %t からは整数が得られません。再入力をお願いします。\n',[Line]),
        fail.