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

时间:2013-04-09 11:36:43

标签: prolog

我正在学习使用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,因为它与b

不匹配

为什么?

3 个答案:

答案 0 :(得分:4)

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

该程序应

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

答案 1 :(得分:2)

这"练习"毫无意义。 使用

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

different(A,B) :- dif(A,B).

答案 2 :(得分:0)

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

enter image description here