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

'つると亀が合わせてn匹います。足の数は合わせてmです。nとmを入力して、つると亀がそれぞれ何匹いるのか求めるプログラムを作りなさい。' :-
        つると亀が合わせてn匹います(_n),
        足の数は合わせてmです(_m),
        between(0,_n,_つるの数),
        between(0,_n,_亀の数),
        _m is 2 * _つるの数 + 4 * _亀の数,
        writef('つるの数は %w 羽、亀の数は %w 匹です。\n',[_つるの数,_亀の数]),!.



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

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

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

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

行入力(_行) :-
        read_line_to_codes(current_input,Codes),
        atom_codes(_行,Codes).