このディレクトリの索引

http://toro.2ch.net/test/read.cgi/tech/1361082416/567
#  [1] 授業単元: 
#  [2] 問題文(含コード&リンク): 
#  1から16777215までの整数を入力すると、それを小数点以下の桁数としたチャンパーノウン定数を表示するプログラムを作成せよ。 
#  指定した桁数を超えて、あるいは満たずに表示させた場合は不正解とする。 
#   
#  【入力例】 
#  16 
#  【出力例】 
#  0.1234567891011121 
#   
#  

'1から16777215までの整数を入力すると、それを小数点以下の桁数としたチャンパーノウン定数を表示するプログラムを作成せよ。
指定した桁数を超えて、あるいは満たずに表示させた場合は不正解とする。' :-
        '1から16777215までの整数を入力すると'(_整数),
        'それを小数点以下の桁数としたチャンパーノウン定数を'(1,0,_整数,_チャンパーノウン定数),
        表示する(_チャンパーノウン定数文字).

'1から16777215までの整数を入力すると'(_整数) :-
        整数を得る('1から16777215までの整数',(整数 > 0,_整数 =< 16777215),_整数).

'それを小数点以下の桁数としたチャンパーノウン定数を表示するプログラムを作成せよ。'(_整数,_チャンパーノウン定数) :-
        'チャンパーノウン定数をならびとして作成'(1,0,_整数,_チャンパーノウン定数文字ならび),
        atomic_list_concat(['0','.'|_チャンパーノウン定数文字ならび],_チャンパーノウン定数).

'チャンパーノウン定数をならびとして作成'(_,_桁1,_限界桁,[]) :-
        _桁1 >= _限界桁,!.
'チャンパーノウン定数をならびとして作成'(N1,_桁1,_限界桁,R1) :-
        'チャンパーノウン定数をならびとして作成'(N1,_桁数,_桁1,_限界桁,R1,R2).
        _桁2 is _桁1 + _桁数,
        N2 is N1 + 1,
        'チャンパーノウン定数をならびとして作成'(N2,_桁2,_限界桁,R2).

'チャンパーノウン定数をならびとして作成'(N1,_桁数,_桁1,_限界桁,R1,R2) :-
        追加文字ならび(N1,_桁数,_桁1,_限界桁,Chars),
        'チャンパーノウン定数をならびとして作成'(Chars,R1,R2).

'チャンパーノウン定数をならびとして作成'([],R,R) :- !.
'チャンパーノウン定数をならびとして作成'([A|R1],[A|R2],R) :-
        'チャンパーノウン定数をならびとして作成'(R1,R2,R).

追加文字ならび(N1,_桁数,_桁1,_限界桁,Chars) :-
        number_chars(N1,Chars1),
        length(Chars,_桁数),
        追加文字ならび(_桁数,_桁1,_限界桁,Chars1,Chars),!.

追加文字ならび(_桁数,_桁1,_限界桁,Chars,Chars) :-
        _桁1 + _桁数 =< _限界桁,!.
追加文字ならび(_桁数,_桁1,_限界桁,Chars1,Chars) :-
        _桁2 is _限界桁 - _桁1,
        length(Chars,_桁2),
        append(Chars,R2,Chars1),!.

表示する(_チャンパーノウン定数文字) :-
        writef('%t',[_チャンパーノウン定数文字]).