Prolog问题 - 平方数

时间:2010-09-08 07:37:28

标签: prolog

我写了一组两个谓词来测试一个数字是否是一个平方数。

patrat_perfect(A):- patr(A, 0).

patr(A, S):- A =:= S * S.

patr(A,S):- A > S * S, T is S+1, patrat(A, T).

patr(A,S):- A < S * S, fail.

第一个谓词patrat_perfect只是对第二个谓词执行第二个谓词的调用,第二个参数的值为0,以及应该测试的数字是否是第一个参数的完美平方。< / p>

patr谓词实际上会从S0搜索该sqrt(A)个数字,该数字与S * S = A等式相符。为此,如果S,则谓词会将1的值增加A > S * S。如果在下次调用时A = S * S,则谓词返回true,如果A < S * S,则谓词通过调用内置谓词{{1}返回false }}

问题是每次调用fail谓词时,都会收到错误值。你能告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

当我修复了代码中的拼写错误(您正在调用patrat但未定义它)时,它似乎正常工作(请参阅http://ideone.com/j7fSAhttp://ideone.com/SjIws)。

可能您错误地复制了代码,或者您在其他地方定义了patrat,但其工作方式不同。