このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1357191974/53
#  
#  お題:nの階乗の末尾の連続した0の個数を求める。
#  

:- dynamic(階乗保存計算/2).
 
'nの階乗の末尾の連続した0の個数を求める。'(_n,_末尾の連続した0の個数) :-
        階乗保存計算(_n,_nの階乗),
        末尾の連続した0の個数(_nの階乗,_末尾の連続した0の個数).

階乗保存計算(0,1) :- !.
階乗保存計算(1,1) :- !.
階乗保存計算(N,X) :-
        N2 is N - 1,
        階乗保存計算(N2,Y),
        X is N * Y,
        asserta((階乗保存計算(N,X) :- !)).

末尾の連続した0の個数(_nの階乗,_末尾の連続した0の個数) :-
        atom_chars(_nの階乗,L),
        append(_,L1,L),
        all(L1,'0'),
        length(L1,_末尾の連続した0の個数).

all([],_).
all([A|R],A) :-
        all(R,A).