Prolog 写経記 その 54 gcd/3

(ほぼ) 毎日淡々と Prolog を写経します.元ネタはこちら.

Prologユーティリティライブラリ

Prologユーティリティライブラリ

今日は gcd/3 を写経します.

解説

gcd(N, M, Gcd)NM の最大公約数を Gcd に具体化する.

らじゃあ.

モード

gcd(+, +, -).

ふむ.

定義

では,こいつの定義を写経しませう.

gcd(N, 0, N) :-
	integer(N), !.
gcd(N, M, Gcd) :-
	integer(N),
	integer(M),
	G is N mod M, !,
	gcd(M, G, Gcd).

ふむ.
引き算じゃなくて余りを求めていく方法ですね.
でもでも,それだけって感じで特にどうという事もなく...

注記

引数 NM が整数でない場合 gcd は失敗する.

らじゃあ.

では使用例を写経しませう.

2 ?- gcd(28, 144, X).

X = 4 

Yes
3 ?- gcd(225, 37, Gcd).

Gcd = 1 

Yes
4 ?- gcd(4.9, 490, G).

No

結果もどうという事もなく...
すげー手抜きっぽいけど手抜きしたいわけじゃなく,そういう内容だからしょうがないのだ.
つまらなくてもひたすら淡々と写経するのだ.