このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1284632294/611
#  入力した整数を行数と解釈し、その後、その行数分だけキーボードから入力された文字をディスプレ 
#  イに出力する。 
#  [条件1] 整数(行数)入力にはscanf 関数を使用する。 
#  (注意!) scanf 関数での入力直後、キーボードバッファに不要な改行コードが1 つ残る。 
#  これをgetchar を1 回実行することによりクリアしなければならない。 
#  [条件2] 行数入力後の文字入出力にはgetchar 関数とputchar 関数を使用する。 
#  <実行例> 注)↲ は、入力時のEnter キーを表す 
#  Input No. of line: 3 
#  abc↲ 
#  abc 
#  1234↲ 
#  1234 
#  xyz#!"↲ 
#  xyz#!" 
#  <入出力情報> 
#  入力出力 
#  キーボードディスプレイ 
#  <エラー仕様> 
#  ・入力された整数(行数)が0 以下だった場合は、その後のキーボード入力は行なわれず終了する 
#  (0 行を指定したと扱う)。 
#  ・入力された整数(行数)が、不正の(整数でない)場合の動作は、保証されなくてよい。 
# 
# 

入力した整数を行数と解釈し、その後、その行数分だけキーボードから入力された文字をディスプレイに出力する :-
        行数を得る(_行数),
        length(L,_行数),
        append(L0,[_|R],L),
        get_line(Line),
        put_line(Line),
        R = [],!.
入力した整数を行数と解釈し、その後、その行数分だけキーボードから入力された文字をディスプレイに出力する.

行数を得る(_行数) :-
        write('行数を入力してください : '),
        get_line(Line),
        診断(Line,_行数),!.
行数を得る(_行数) :-
        行数を得る(_行数).

診断(Atom,_行数) :-
        atom_to_term(Atom,_行数_1,_),
        integer(_行数_1),
        診断2(_行数_1,_行数),!.
診断(Atom,_行数) :-
        write_formatted('入力された %t は整数ではありません。再入力をお願いします。\n',[Atom]),
        fail.

診断2(_行数_1,0) :-
        _行数_1 =< 0,!.
診断2(_行数,_行数).