作者: 機械伯爵
日時: 2009/5/10(18:41)
 とかなんとか言っても、やっぱりオリジナルでないのは悔しいので、
意地で若干手直ししました。

■オリジナル再帰版(誤植がありましたので修正、ついでにフォーマットもオリ
ジナルに)

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%上と同じです。

 /機械伯爵/