このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/572
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク): 
#    5個の果物から3個取り出してかごに入れるときの入れ方は何通りあるか。 
#    この組み合わせを計算するプログラムを作成せよ。  
#  

'5個の果物から3個取り出してかごに入れるときの入れ方は何通りあるか。'(_何通り) :-
        nCr(5,3,_何通り).

nCr(N,R,X) :-  /* abolish(階乗/2),'assertz_階乗_2', */
    U is N - R + 1,
    階乗(U,N,K1),
    階乗(R,K2),
    X is K1 // K2.

階乗(M,N,1) :-
        M > N,
        !.
階乗(M,N,X) :-
        M2 is M + 1,
        階乗(M2,N,Y),
        X is M * Y .

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

'assertz_階乗/2' :-
        assertz((階乗(0,1) :- !)),
        assertz((階乗(1,1) :- !)),
        assertz((階乗(N,X) :- N2 is N - 1,階乗(N2,Y),X is N * Y,asserta((階乗(N,X) :- (!))))).