测试应该返回true:如果第一部分为真,第二部分为假。
试图做那样的事情:
f_test :- f(x), % 1st part
f(y) is false. % 2nd part
但它给了我一个错误:
ERROR: is/2: Arithmetic: `false/0' is not a function.
请告诉我,如何正确地做到这一点?
答案 0 :(得分:3)
(is)/2
是一个用于执行算术的谓词。即使您的测试是关于算术的,也会优先使用(=:=)/2
(因为(is)/2
用于实例化变量。当您使用它来检查变量值时,您会误用它.OTOH,{ {1}}用于比较数字。)
但在这里,你的测试不是关于算术,而是关于知道某些事情是否真实。有一个运算符,它检查给定的术语是否可证明,它是(=:=)/2
,使用是:
(\+)/1
答案 1 :(得分:1)
你可以尝试
f_test :- f(x), \+f(y).