このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/138
#  [1] 授業単元:プログラミング 
#  [2] 問題文:[1] 授業単元:
http://ime.nu/www.fluid.cse.nagoya-u.ac.jp/~ishihara/c/Sec6kadai20.html 
#  
#  2つの自然数aとbの最大公約数gcd(a, b)を求め、それを出力するプログラムを作成せよ。
#  
#  なお、m = a % b としたとき、gcd(a, b) は m≠0 の場合 gcd(b, m) に等しく、 m=0 の場合 b に等しい。
#  
#  2つの自然数aとbを入力させ、a 人から b 人を選ぶ組み合わせ comb(a, b)を求め、それを出力するプログラムを作成せよ。
#  
#  なお、comb(a, b) = comb( a-1, b) + comb( a-1, b-1) であり、 b==0 もしくは b==a のとき comb(a, b) = 1 である。

'2つの自然数aとbを入力させ、a 人から b 人を選ぶ組み合わせ comb(a, b) を求め、それを出力する' :-
        '2つの自然数aとbを入力させ'(_a,_b),
        comb(_a,_b,X),
        それを出力する'(_a,_b,X).

'2つの自然数aとbを入力させ'(_a,_b) :-
        整数を得る(自然数,_a > 0,_a),
        整数を得る(自然数,_b > 0,_b).

comb(_a,0,1).
comb(_a,_a,1).
comb(_a,_b,_x) :-
        _a_1 is _a - 1,
        _b_1 is _b - 1,
        comb(_a_1,_b,_x_1),
        comb(_a_1,_b_1,_x_2),
        _x is _x_1 + _x_2.

それを出力する(_a,_b,X) :-
        writef('%t 人から %t 人を選ぶ組み合わせは %t 通りです。\n',[_a,_b,X]).


%  整数を得る/2,整数を得る/3