1
プロローグで階乗コードを作成しようとしていますが、ローカルスタックからのエラーが発生しています。つまり、無限ループに陥っています。どうして私は理解できません。 私のコードは次のとおりです。プロローグエラー:階乗のローカルスタックから
fact(0,1).
fact(1,1).
fact(X,Y):- X\==0, A=X-1, fact(A,Z), Y=X*Z.
どこが間違っていますか?
プロローグで階乗コードを作成しようとしていますが、ローカルスタックからのエラーが発生しています。つまり、無限ループに陥っています。どうして私は理解できません。 私のコードは次のとおりです。プロローグエラー:階乗のローカルスタックから
fact(0,1).
fact(1,1).
fact(X,Y):- X\==0, A=X-1, fact(A,Z), Y=X*Z.
どこが間違っていますか?
A=X-1
以降、Y=X*Z
です。どうやら、プロローグが私たちをからかっている
?- A = X-1.
A = X-1.
?- A = 5-1.
A = 5-1.
:):プロローグトップレベルの素晴らしいところは、あなたが簡単にあなたのコードが何をするか試してみることができるということです。 =
演算子は統一に使用されます。あなたが算術演算を行いたい場合、あなたはis/2
を使用する必要があります。
?- is(A, -(5, 1)).
A = 4.
通常のように記述:ちょうど式が用語であり、そしてその第二に用語を評価していることを示すために
?- A is 5-1.
A = 4.
この引数:
?- Expr = X-1, X = 3, Result is Expr.
Expr = 3-1,
X = 3,
Result = 2.
階乗の定義には、算術演算を修正すると効果があります。初めにX
の条件がX \== 0
の代わりにX > 1
と表示されている場合は、より清潔になります。現在のプログラムはfact(1,F)
のために何を行いますか?
これは機能します。どうもありがとう! – telekineser