このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1309076891/523
#  【 課題 】キーボードで生徒のデータを入力するプログラムを作成せよ 
#  データは名前、ID、学年、電話番号からなり、学年の入力が負の場合メッセージを表示して中断する。 
#  【 形態 】Javaアプリケーション(main()で開始 
#  【 GUI  】制限なし 
#  【 期限 】2011年11月24日(木) 
#  【 Ver  】java version 1.6.0_22 
#  【 補足 】作ってみたものの、上手く行きません。 
#  http://ime.nu/ideone.com/8gqKi 
#  何処がどう間違っているか指摘していただければ幸いです。 
# 
# 

'キーボードで生徒のデータを入力する。データは名前、ID、学年、電話番号からなり、学年の入力が負の場合メッセージを表示して中断する。' :-
        repeat,
        'キーボードで生徒のデータを入力する。'(_名前,_ID,_学年,_電話番号,_診断),
        生徒のデータを登録する(_名前,_ID,_学年,_電話番号,_診断),!.

'キーボードで生徒のデータを入力する。'(_名前,_ID,_学年,_電話番号,_診断) :-
        指示に従い一行入力する('名前,ID,学年,電話番号 をカンマ区切りで入力して下さい(終了したい時は改行のみ) : ',Line),
        入力診断(Line,_名前,_ID,_学年,_電話番号,_診断),
        \+(_診断 = 再入力),!.
'キーボードで生徒のデータを入力する。'(_名前,_ID,_学年,_電話番号,_診断) :-
        'キーボードで生徒のデータを入力する。'(_名前,_ID,_学年,_電話番号,_診断).

指示に従い一行入力する(_指示,Line) :-
        writef('%t',[_指示]),
        get_line(Line),!.

入力診断('',_名前,_ID,_学年,_電話番号,終了) :- !.
入力診断(Line,_名前,_ID,_学年_1,_電話番号,入力完了) :-
        split(Line,[','],[_名前,_ID,_学年,_電話番号]),
        学年の入力が負の場合メッセージを表示して中断する(_学年_1,_学年),!.
入力診断(Line,_名前,_ID,_学年,_電話番号,再入力) :-
        writef('入力された %t からは求める生徒データが得られません。再入力をお願いします。\n',[Line]).

学年の入力が負の場合メッセージを表示して中断する(_学年,_学年) :-
        _学年 >= 0,!.
学年の入力が負の場合メッセージを表示して中断する(_学年_1,_学年) :-
        _学年_1 < 0,
        writef('学年データ%tが負数です。再入力をしますか? y or n : ',[_学年_1]),
        get_line(y),
        学年の再入力(_学年),!.

学年の再入力(_学年) :-
        write('学年を入力して下さい : '),
        get_line(Line),
        学年再入力診断(Line,_学年),!.

学年再入力診断(Line,_学年) :-
        atom_to_term(Line,_学年,_),
        integer(_学年),
        _学年 >= 0,!.

生徒のデータを登録する(_名前,_ID,_学年,_電話番号,終了) :- !.
生徒のデータを登録する(_名前,_ID,_学年,_電話番号,入力完了) :-
        assertz(生徒のデータ(_名前,_ID,_学年,_電話番号)),
        fail.

%
%  http://nojiriko.asia/prolog/j71_523.html とは僅かな違い。
%  何処が違うのか、捜すのさえ難しいくらいだが。
%  どちらが好ましい表現かという問題。
%