とかなんとか言っても、やっぱりオリジナルでないのは悔しいので、
意地で若干手直ししました。
■オリジナル再帰版(誤植がありましたので修正、ついでにフォーマットもオリ
ジナルに)
fact(0, 1).
fact(X, Sum) :-
X > 0, X1 is X - 1, fact(X1, Sum1), Sum is X * Sum1.
参照元『M.Hiroi's Home Page』
http://www.geocities.jp/m_hiroi/prolog/prolog02.html
■再帰定義をやや判りやすく書き直した版
fact(0, 1).
fact(N, Fn):-
fact(N1, Fn1),
N is N1 + 1,
Fn is Fn1 * N.
コメント:アルゴリズムは多分同じなのだろうけど、定義っぽく書いてみました。
ちなみに、類似定義を何本か書いてみましたが、動いたのはコレだけ。
<わざと関数子を前置で書いたバージョン>
fact(0, 1).
fact(N, Fn):-
fact(N1, Fn1),
is(N, +(N1, 1)),
is(Fn, *(Fn1, N)).
コメント:Prologらしさ、ということで、アルゴリズムではなくあえて書式を前
置で。やってることは100%上と同じです。
/機械伯爵/