首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释基本Prolog结果

解释基本Prolog结果
EN

Stack Overflow用户
提问于 2021-03-08 10:37:33
回答 1查看 79关注 0票数 2

我对Prolog的基本知识感到困惑。

如果我有这个知识库:

代码语言:javascript
复制
loves(vincent, mia).
loves(marcellus, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

jealous(X, Y) :-
    loves(X, Z),
    loves(Y, Z).

那我就假设

"X爱Z,Y爱Z,X嫉妒Y“

当我运行查询jealous(X, Y).

我得到了

代码语言:javascript
复制
X = Y, Y = vincent
X = vincent,
Y = marcellus
X = marcellus,
Y = vincent
X = Y, Y = marcellus
X = Y, Y = pumpkin
X = Y, Y = honey_bunny

我可以看出文森特嫉妒马赛利乌斯,马赛利斯嫉妒文森特,但是X = Y, Y = vincent表格中的台词告诉我什么呢?我假设当有匹配时,下一行给出查询为真的值,如下所示

代码语言:javascript
复制
X = Y, Y = vincent
X = vincent,
Y = marcellus
X = marcellus,
Y = vincent

而在X = Y, Y = marcellus和其他方面没有任何东西意味着没有匹配。但是X = Y, Y = vincent对我来说没有任何意义。如果它的意思是"X是一些值Y,让我们假设Y是文森特“,那就说得通了。但这并不能解释X = marcellus, Y = vincent的结果。

任何了解这一点的帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-08 11:15:59

X = Y, Y = vincent表格中的行告诉我什么?

文森特嫉妒自己:-)

您是对的,输出是令人困惑的,如果它是X=vincent, Y=vincent,则会更清楚,这是等价的。prolog并没有强制您提到的奇怪的输出形式,它是prolog系统的实现选择,可能是因为他们希望得到非常简短的答案。

如果你想排除某人嫉妒自己的可能性,你需要改变你对嫉妒的定义,并要求X与Y不同,例如:

代码语言:javascript
复制
jealous(X, Y) :-
    loves(X, Z),
    loves(Y, Z),
    X\=Y.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66528247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档