このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/190
#  [1] 授業単元:プログラミング  
#  [2] 問題文:  
#  1つの整数n(但しn>=1)を入力するとn!を返すseki関数を作成する。 
#  そしてn枚のカードからr枚のカードを選ぶ組み合わせを計算するプログラムを作成しなさい。 
#  但し、n≧1、r≧1、n≧rを前提とする。 
#  

:- dynamic('1つの整数n(但しn>=1)を入力するとn!を返す'/2).

'1つの整数n(但しn>=1)を入力するとn!を返す'(1,1) :- !.
'1つの整数n(但しn>=1)を入力するとn!を返す'(_n,X) :-
        _n_1 is _n - 1,
        '1つの整数n(但しn>=1)を入力するとn!を返す'(_n_1,X_1),
        X is _n * X_1,
        asserta(('1つの整数n(但しn>=1)を入力するとn!を返す'(_n,X) :- !)),!.

'そしてn枚のカードからr枚のカードを選ぶ組み合わせを計算する'(_n,_r,_組み合わせ数) :-
        '1つの整数n(但しn>=1)を入力するとn!を返す'(_n,_nの階乗),
        '1つの整数n(但しn>=1)を入力するとn!を返す'(_r,_rの階乗),
        Y is _nの階乗 // _rの階乗,
        _組み合わせ数 is Y // _rの階乗.