为了账号安全,请及时绑定邮箱和手机立即绑定

Prolog中的逻辑“不”是什么?

Prolog中的逻辑“不”是什么?

侃侃尔雅 2019-10-21 14:32:38
我面临的问题有点琐碎。我想在Prolog中不使用逻辑,但是这似乎not/1不是我想要的东西:course(ai).course(pl).course(os).have(X,Y) :- course(X),course(Y),not(X = Y).我查询:have(X,Y), write(X-Y), nl , fail.而且我没有得到想要的结果:(
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

在SWI-Prolog和GNU Prolog中,以下都应该起作用:


have(X, Y) :- course(X), course(Y), X \= Y.

在SWI-Prolog中,您还可以使用dif/2,它可以更加方便,因为您可以在谓词中更早地使用它:


have(X, Y) :- dif(X, Y), course(X), course(Y).


查看完整回答
反对 回复 2019-10-21
?
慕少森

TA贡献2019条经验 获得超9个赞

作为上述用户“假”答案的补充,即

“代替not(X = Y),您需要编写\ + X = Y,”

这可能给人的印象是:

一种。“ not”和“ \ +”是不同的东西

b。\ +将起作用,而不是,则不会。

我的理解是“ not”和“ \ +”是等效的,但是\ +在现代Prolog程序中是首选,因为它传达了一种更直观的感觉。具体而言,尽管“不”可能暗示粗心的编码器“不正确”,而“ \ +”却暗示“不可证明”,这与该操作实际上在说什么很接近。在Prolog中,“不是”是“否定即失败”的一个示例,但是可以感觉到\ +将使程序员更清楚在任何给定规则中确切地断言了什么。因此,您可以使用“ not”(大多数PL实现将其保留为向后兼容),但要成为惯用的现代PL程序员,您可能应该更喜欢使用\ +。


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 1228 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信