このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/703
#  [1] 授業単元:C 
#  [2] 問題文(含コード&リンク): 
#  自然数を入力すると、その階乗を表示するようなプログラムを作成せよ。 
#  ただし、演算結果が1000桁以下になる場合のみ対応し、
#  演算結果が1000桁を超える場合はその旨を表示して終了すること。 
#  

'自然数を入力すると、その階乗を表示する' :-
        自然数を入力すると(_自然数),
        その階乗を表示する(_自然数).

自然数を入力すると(_自然数) :-
        write('自然数を入力してください : '),
        readln([_自然数]),
        integer(_自然数),
        _自然数 > 0,!.
自然数を入力すると(_自然数) :- 自然数を入力すると(_自然数).

その階乗を表示する(_自然数) :-
        その階乗を(1,_自然数,1,_階乗),
        表示する(_階乗),!.
その階乗を表示する.

その階乗を(N,_自然数,_階乗,_階乗) :- N > _自然数,!.
その階乗を(N,_自然数,_階乗1,_階乗) :-
        _階乗2 is N * _階乗1,
        演算結果が1000桁以下になる場合のみ(_階乗2),
        N2 is N + 1,
        その階乗を(N2,_自然数,_階乗2,_階乗),!.
その階乗を(N,_自然数,_階乗1,_) :-
        _階乗2 is N * _階乗1,
        '演算結果が1000桁を超える場合はその旨を表示して終了する'(_自然数,_階乗2),!,fail.

表示する(N) :-
        writef('%t\n',[N]).

'演算結果が1000桁以下になる場合のみ'(_階乗1) :-
        number_chars(_階乗1,L),
        length(L,Len),
        Len =< 1000,!.

'演算結果が1000桁を超える場合はその旨を表示して終了する'(_自然数,_階乗2) :-
        number_chars(_階乗2,L),
        length(L,Len),
        Len > 1000,
        writef('%t数の階乗計算に於いて1000桁を超えてしまいました。プログラムを終了します。\n',[_自然数]).