简单:如何对错误案例进行测试?

Jak*_*nds 2 prolog

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

试图做这样的事情:

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)

请告诉我,如何正确地做到这一点?

m09*_*m09 5

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

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

f_test :-
    f(x),
    \+ f(y).
Run Code Online (Sandbox Code Playgroud)