2

测试应该返回真:如果第一部分为真,第二部分为假。

试图做这样的事情:

f_test  :- f(x), % 1st part
           f(y) is false. % 2nd part

但这给了我一个错误:

ERROR: is/2: Arithmetic: `false/0' is not a function.

请告诉我,如何正确执行?

4

2 回答 2

5

(is)/2是用于执行算术运算的谓词。即使您的测试是关于算术的,(=:=)/2也最好使用 (因为(is)/2用于实例化变量。当您使用它来检查变量值时,您会误用它。OTOH,(=:=)/2用于比较数字)。

但是在这里,您的测试不是关于算术,而是关于知道某事是否真实。有一个运算符用于检查给定术语是否可证明,它是(\+)/1,使用是:

f_test :-
    f(x),
    \+ f(y).
于 2012-05-21T12:01:48.003 回答
1

你可以试试

f_test :- f(x), \+f(y).
于 2012-05-21T12:00:43.350 回答