このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1364700745/961
#  【質問テンプレ】 
#  [1] 授業単元:c言語 
#  [2] 問題文(含コード&リンク):右に示すように1234567890を繰り返し表示するプログラムを作成せよ。なお、表示する数字は読み込まれた整数値の個数とする。 
#  右に示されている図 
#  整数の入力してください:25 
#  1234567890123456789012345 
#  

'1234567890を繰り返し表示するプログラムを作成せよ。なお、表示する数字は読み込まれた整数値の個数とする。' :-
'表示する数字は読み込まれた整数値の個数とする。'(_個数),
'1234567890を繰り返し表示する'(_個数).

'表示する数字は読み込まれた整数値の個数とする。'(_個数) :-
整数を得る(整数,true,_個数).

'1234567890を繰り返し表示する'(_個数) :-
'1234567890を繰り返し'(_個数,_1234567890のならび),
表示する(_1234567890のならび).

'1234567890を繰り返し'(_個数,_1234567890のならび) :-
findnsols(_個数,N,数字(1,N),_1234567890のならび).

表示する(_1234567890のならび) :-
atomic_list_concat(_1234567890のならび,_数字列),
writef('%w\n',[_数字列]).

数字(M,_数字) :-
数字連鎖(M,N),
数字(M,N,_数字).

数字(_数字,_,_数字).
数字(_,N,_数字) :-
数字(N,_数字).

数字連鎖(1,2).
数字連鎖(2,3).
数字連鎖(3,4).
数字連鎖(4,5).
数字連鎖(5,6).
数字連鎖(6,7).
数字連鎖(7,8).
数字連鎖(8,9).
数字連鎖(9,0).
数字連鎖(0,1).


整数を得る(_催促文,_事後実行ゴール,_整数) :-
'催促文の表示と行入力'(_催促文,_行),
整数入力検査(_行,_整数),
call(_事後実行ゴール).

'催促文の表示と行入力'(_催促文,_行) :-
writef('%wを入力してください : ',[_催促文]),
行入力(_行).

整数入力検査(_行,_整数) :-
行を整数に変換(_行,_整数),!.
整数入力検査(_行,_) :-
writef('入力された%wからは、整数を得られません\n',[_行]),
fail.

行を整数に変換(_行,_整数) :-
atom_number(_行,_整数),
integer(_整数).

行入力(_行) :-
read_line_to_codes(current_input,Codes),
atom_codes(_行,Codes).