我对Prolog的基本知识感到困惑。
如果我有这个知识库:
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).时
我得到了
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表格中的台词告诉我什么呢?我假设当有匹配时,下一行给出查询为真的值,如下所示
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的结果。
任何了解这一点的帮助都很感激。
发布于 2021-03-08 11:15:59
,
X = Y, Y = vincent表格中的行告诉我什么?
文森特嫉妒自己:-)
您是对的,输出是令人困惑的,如果它是X=vincent, Y=vincent,则会更清楚,这是等价的。prolog并没有强制您提到的奇怪的输出形式,它是prolog系统的实现选择,可能是因为他们希望得到非常简短的答案。
如果你想排除某人嫉妒自己的可能性,你需要改变你对嫉妒的定义,并要求X与Y不同,例如:
jealous(X, Y) :-
loves(X, Z),
loves(Y, Z),
X\=Y.https://stackoverflow.com/questions/66528247
复制相似问题