我写了一组两个谓词来测试一个数字是否是一个平方数。
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
谓词实际上会从S
到0
搜索该sqrt(A)
个数字,该数字与S * S = A
等式相符。为此,如果S
,则谓词会将1
的值增加A > S * S
。如果在下次调用时A = S * S
,则谓词返回true
,如果A < S * S
,则谓词通过调用内置谓词{{1}返回false
}}
问题是每次调用fail
谓词时,都会收到错误值。你能告诉我哪里出错了吗?
答案 0 :(得分:0)
当我修复了代码中的拼写错误(您正在调用patrat
但未定义它)时,它似乎正常工作(请参阅http://ideone.com/j7fSA和http://ideone.com/SjIws)。
可能您错误地复制了代码,或者您在其他地方定义了patrat
,但其工作方式不同。