このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1296387672/313
#  [1] 授業単元:プログラミング演習 2  
#  [2] 問題文(含コード&リンク)  
#  
#  1..キーボードから学生番号と氏名の組をn個読み込み、ファイルに書き込む関数を作れ。
#     ただし、nの値とファイル名は引数として取得するものとする。
#  2..引数で取得したファイル名のファイルから同じく引数で取得した個数の学生番号と
#     氏名のデータを構造体変数に格納し、学生番号順に表示する関数を作れ。
#  3..以上で作成した関数を使用し、プログラムを完成せよ。ただし、nの値と使用するファイルの名前は
#     プログラムの引数として与えられるものとする。

program :-
        user_parameters([_n個文字列,_ファイル]),
        atom_to_term(_n個文字列,_n個,_),
        キーボードから学生番号と氏名の組をn個読み込み、ファイルに書き込む(_n個,_ファイル),
        引数で取得したファイル名のファイルから同じく引数で取得した個数の学生番号と氏名のデータを構造体変数に格納し、学生番号順に表示する(_ファイル,_n個).


'キーボードから学生番号と氏名の組をn個読み込み、ファイルに書き込む'(_n個,_ファイル) :-
        length(L,_n個),
        学生番号と氏名の組を読み込む(L),
        open(_ファイル,write,Outstream),
        append(_,[[_学生番号,_氏名]|R],L),
        write_foratted(Outstream,'%t,%t\n',[_学生番号,_氏名]),
        R = [],
        close(Outstream),!.

引数で取得したファイル名のファイルから同じく引数で取得した個数の学生番号と氏名のデータを構造体変数に格納し、学生番号順に表示する(_ファイル,_n個) :-
        length(L,_n個),
        get_line(_ファイル,Lines),
        append(L,_,Lines),
        sort(L,_整列済みデータ),
        append(_,[[_学生番号,_氏名]|R],_整列済みデータ),
        write_formatted('%t,%t\n',[_学生番号,_氏名]),
        R = [],!.

学生番号と氏名の組を読み込む([]) :- !.
学生番号と氏名の組を読み込む([[_学生番号,_氏名]|R]) :-
        学生番号を読み込む(_学生番号),
        氏名を読み込む(_氏名),
        学生番号と氏名の組を読み込む(R).

学生番号を読み込む(_学生番号) :-
        write('学生番号を入力してください : '),
        get_line(_学生番号),!.

学生番号を読み込む(_氏名) :-
        write('氏名を入力してください : '),
        get_line(_氏名),!.