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