Prolog中的不同谓词不起作用(始终为假)

3
我正在使用SWI Prolog学习Prolog,为大学考试做准备。我对这个实现“different”谓词的简单程序有一些疑问。如果两个元素不同(不匹配),则该谓词返回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
为什么要调试,当有 Stack Overflow 呢? - user1812457
我为我的愚蠢问题道歉...我在办公室工作了整晚,现在有点精神混乱。 - AndreaNobili
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5

将diferent(_,_)更改为different(_,_), 这是一个拼写错误。

由于第二个谓词与您的查询不匹配,因此它未被检查。

程序应该是:

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

天啊...我刚从整整一晚上的办公室工作回来...显然还无法集中注意力....我需要更多的咖啡...谢谢。 - AndreaNobili

2
这个“练习”毫无意义。使用 !在我看来,`different/2` 的唯一合理定义是:
different(A,B) :- dif(A,B).

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

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,