このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/565
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク): 
#  http://ime.nu/codepad.org/6wsr2CEj 
#  国語と数学の2科目のテストの成績を処理するプログラムにおいて、生徒数を
#  キーボードから入力した後に、そのデータを入力し、最後に入力したデータ全てを
#  表示する。
#  

'国語と数学の2科目のテストの成績を処理するプログラムにおいて、生徒数をキーボードから入力した後に、そのデータを入力し、最後に入力したデータ全てを表示する' :-
        生徒数をキーボードから入力した(_生徒数),
        後に,
        そのデータを入力し(_生徒数,_入力したデータ),
        最後に入力したデータ全てを表示する(_入力したデータ).

生徒数をキーボードから入力した(_生徒数) :-
        get_line(Line),
        生徒数入力診断(Line,_生徒数),!.
生徒数をキーボードから入力した(_生徒数) :- 生徒数をキーボードから入力した(_生徒数).

生徒数入力診断(Line,_生徒数) :-
        atom_to_term(Line,_生徒数,_),
        integer(_生徒数),!.
生徒数入力診断(Line,_生徒数) :-
        writef('入力された %t から生徒数が得られませんでした。再入力をお願いします。',[Line]),
        fail.

後に :- true.

そのデータを入力し(_生徒数,_入力したデータ) :-
        length(_入力したデータ,_生徒数),
        そのデータを入力し(_入力したデータ).

そのデータを入力し([]).
そのデータを入力し([[_国語,_数学]|R]) :-
        国語点数を入力(_国語),
        数学点数を入力(_数学),
        そのデータを入力し(R).

国語点数を入力(_国語点数) :-
        get_line(Line),
        国語点数入力診断(Line,_国語点数),!.
国語点数を入力(_国語点数) :- 国語点数を入力(_国語点数).

国語点数入力診断(Line,_国語点数) :-
        atom_to_term(Line,_国語点数,_),
        integer(_国語点数),!.
国語点数入力診断(Line,_国語点数) :-
        writef('入力された %t から国語点数が得られませんでした。再入力をお願いします。',[Line]),
        fail.

数学点数を入力(_数学点数) :-
        get_line(Line),
        数学点数入力診断(Line,_数学点数),!.
数学点数を入力(_数学点数) :- 数学点数を入力(_数学点数).

数学点数入力診断(Line,_数学点数) :-
        atom_to_term(Line,_数学点数,_),
        integer(_数学点数),!.
数学点数入力診断(Line,_数学点数) :-
        writef('入力された %t から数学点数が得られませんでした。再入力をお願いします。',[Line]),
        fail.

最後に入力したデータ全てを表示する(_入力したデータ) :-
        append([_,[[_国語,_数学]|R],_入力したデータ),
        writef('%t,%t\n',[_国語,_数学]),
        R = [].