Prolog中的不同谓词,不起作用(总是错误的)

And*_*ili 2 prolog

我正在使用 SWI Prolog 为大学考试学习 Prolog,我对这个简单的程序有一些疑问,该程序实现了不同的谓词,如果两个元素不同(如果它们不匹配),则说 TRUE,如果它们匹配,则说 FALSE。

这是代码:

different(X,X) :- !,
              fail.

diferent(_,_).
Run Code Online (Sandbox Code Playgroud)

问题是,如果我尝试在 Prolog shell 中执行以下查询,我总是得到 FALSE:

[debug] 10 ?- different(a,b).
false.

[debug] 11 ?- different(a,a).
false.
Run Code Online (Sandbox Code Playgroud)

如您所见,第一个查询必须说 TRUE,因为 a 与 b 不匹配

为什么?

Ken*_*Man 5

将不同的(_,_)更改为不同的(_,_)。即这是一个拼写错误。您的第二个谓词没有被检查,因为它与您的查询不匹配。

程序应该是

different(X,X) :- !,fail.
different(_,_).
Run Code Online (Sandbox Code Playgroud)