このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/770
#  1番目:1から20までの整数を入力してください:7 
#  2番目:2から20までの整数を入力してください:11 
#  3番目:2から20までの整数を入力してください:12 
#  4番目:13から20までの整数を入力してください:20 
#  もういちど最初からやり直してください。 
#  1番目:1から20までの整数を入力してください:7 
#  2番目:8から20までの整数を入力してください:11 
#  3番目:12から20までの整数を入力してください:1 
#  3番目:12から20までの整数を入力してください:12 
#  4番目:13から20までの整数を入力してください:17 
#  5番目:18から20までの整数を入力してください:19 
#  7 11 12 17 19 
# 
%
%  この問題には以下の質問をぶつけてあります。
%  >>770
%  二行目、三行目の範囲下限が何故2なのかわからない。8,12ではないのか? 

'1から範囲を狭めながら19までの数列を得て表示する' :-
        '1から範囲を狭めながら19までの数列を得る'(1,1,_1から19までの数列),
        '1から19までの数列を表示する'(_1から19までの数列),!.

'1から範囲を狭めながら19までの数列を得る'(_,20,[]).
'1から範囲を狭めながら19までの数列を得る'(N,_から,[X|R]) :-
        '20までの数値入力'(N,_から,X),
        _から_2 is _から + 1,
        N_2 is N + 1,
        '1から範囲を狭めながら19までの数列を得る'(N_2,_から_2,R).
'1から範囲を狭めながら19までの数列を得る'(_,_,L) :-
        もういちど最初からやりなおす(L).

もういちど最初からやりなおす(L) :-
        write('もういちど最初からやり直してください。\n'),
        '1から範囲を狭めながら19までの数列を得る'(1,1,L).

'20までの整数入力'(N,_から,X) :-
        writef('%t番目:%tから20までの整数を入力してください:',[N,_から]),
        '20までの整数入力'(_から,X),!.
'20までの整数入力'(N,_から,X) :-
        '20までの整数入力'(N,_から,X).

'20までの整数入力'(_から,X) :-
        get_line(Line),
        '20までの整数入力診断'(Line,_から,X).

'20までの整数入力診断'(Line,_から,X) :-
        atom_to_term(Line,X,_),
        integer(X),
        X >= _から,
        X < 20.

'1から19までの数列を表示する'(L) :-
        concat_atom(L,' ',_表示文字列),
        writef('%t\n',[_表示文字列]).

%
%  get_line/1
%