2

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

这是代码:

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

diferent(_,_).

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

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

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

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

为什么?

4

3 回答 3

5

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

程序应该是

different(X,X) :- !,fail.
different(_,_).
于 2013-04-09T11:45:28.120 回答
2

这种“锻炼”毫无意义。使用

IMO唯一合理的定义different/2是:

different(A,B) :- dif(A,B).
于 2015-05-05T07:33:32.383 回答
0

如果您使用 emacs 来编辑您的 prolog 文件(如果不是,我强烈建议您切换到它)我建议您使用 hi-lock-mode。只要光标在一个单词上,我就会以类似模式的方式突出显示文件中的所有匹配项。当您开发更大的项目时,它可以为您节省数小时的痛苦。

在此处输入图像描述

于 2013-06-29T12:35:23.420 回答