このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/386
#  [1] 授業単元:課題  
#  [2] 問題文:  
#  読み込んだ2つの正整数の最大公約数を出力するプログラムを作成せよ.ただし,以下の関数 gcd() を再帰を用いて定義し,使用すること. 
#  書式 
#      int gcd(int m, int n);  
#  返り値 
#      正整数m, nの最大公約数 
#  実行結果1 
#  2正整数 > 8 12 
#  4 
#  実行結果2 
#  2正整数 > 81 64 
#  1 
#  

読み込んだ2つの正整数の最大公約数を出力する :-
        読み込んだ2つの正整数(_1つ目の正整数,_2つ目の正整数),
        最大公約数(_1つ目の正整数,_2つ目の正整数,_最大公約数),
        出力する(_最大公約数).

読み込んだ2つの正整数(_1つ目の正整数,_2つ目の正整数) :-
        write('2つの正の整数を空白で区切り一行で入力してください : '),
        get_line(Line),
        2つの正整数を読み込み診断(Line,_1つめの正整数,_2つ目の正整数),!.
読み込んだ2つの正整数(_1つ目の正整数,_2つ目の正整数) :-
        読み込んだ2つの正整数(_1つ目の正整数,_2つ目の正整数).

'2つの正整数を読み込み診断'(Line,_1つめの正整数,_2つ目の正整数) :-
        split(Line,[' '],[_1つ目の正整数,_2つ目の正整数]),
        integer(_1つ目の正整数),
        integer(_2つ目の正整数),
        _1つ目の正整数 > 0,
        _2つ目の正整数 > 0,!.
'2つの正整数を読み込み診断'(Line,_,_) :-
        writef('入力された %t から2つの正整数を得ることができません。再入力をお願いします。\n',[Line]),
        fail.

最大公約数(M,N,X) :-
        最大公約数をユークリッドの互除法で求める(M,N,X),!.

最大公約数をユークリッドの互除法で求める(M,N,N) :-
        0 is M mod N,!.
最大公約数をユークリッドの互除法で求める(M,N,X) :-
        Mod is M mod N,
        最大公約数をユークリッドの互除法で求める(N,Mod,X).

出力する(_最大公約数) :-
        writef('%t\n',[_最大公約数]).