【发布时间】:2015-05-30 02:08:58
【问题描述】:
我有一个计算阶乘的代码如下:
fact(1,1).
fact(X,R):- X1 is X-1, fact(X1,R1), R is R1*X.
在我看来,这段代码不应该正常工作,但确实可以!我的理由是什么?我认为当我们调用 fact(3,R) 时,首先它会计算“X1 is X1 -1”。然后进入下一条规则fact(X1,R1)。这将再次调用目标部分,代码执行将返回到目标“fact(X,R)”,这将一直持续到我们到达 fact(1,1)。这意味着它永远不会去 R 是 R1*X 部分。所以,看来我想错了。
谁能一步一步告诉我这段代码中的代码执行顺序? 谢谢
【问题讨论】:
-
fact(1,0)不会终止。还有fact(1,1), false循环,尽管它应该会失败。但是,fact(1,1)会产生一个答案,从而引诱您进入一些安全状态。始终要求下一个答案,以确保您没有无限循环。