【发布时间】:2014-05-22 13:44:21
【问题描述】:
如果整数A 和B 没有C 作为最高公因数,我希望使用以下bar/3 谓词打印false,否则它应该打印true,但到目前为止它是在 C 不是 HCF 的情况下给出错误。
我不确定如何解决这个问题。
foo(P,Q,R):-L is P/Q,R is P-Q*floor(L).
bar(A,0,A).
bar(A,B,C):-foo(A,B,X),bar(B,X,C).
例如,如果出现错误,我会得到
?- bar(27,30,1).
ERROR: //2: Arithmetic: evaluation error: `zero_divisor'
而不是
?- bar(27,30,1).
false
如果成功,我会得到我想要的正确结果
?- bar(27,30,3).
true
【问题讨论】:
-
如果您正在使用整数及其因数,为什么要使用浮点数?
-
你的
L is P/Q, R is P - Q*floor(L)可以写成R is P - (P // Q)。 -
执行
trace以查看您在调用foo/3时允许在哪里使用零 (0) 参数Q。 -
@lurker: 对于
P = -2,Q = 3`,你产生-2而不是1。使用div。或者更简单:mod. -
啊,是的,非常感谢@false。很好的收获。
标签: prolog greatest-common-divisor