我正在学习使用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
不匹配为什么?
答案 0 :(得分:4)
将不同的(_,_)更改为不同的(_,_)。即它是一个拼写错误。 您的第二个谓词未被检查,因为它与您的查询不匹配。
该程序应
different(X,X) :- !,fail.
different(_,_).
答案 1 :(得分:2)
答案 2 :(得分:0)
如果你使用emacs编辑你的prolog文件(如果不是我强烈建议你切换到它)我建议你使用hi-lock-mode。每当光标在一个单词上时,我将以类似模式的方式突出显示文件中的所有匹配项。当您开发更大的项目时,它可以为您节省数小时的痛苦。