gpt4 book ai didi

prolog - 为什么我的谓词不起作用,而类似的谓词却起作用?

转载 作者:行者123 更新时间:2023-12-02 09:00:49 25 4
gpt4 key购买 nike

我有以下事实:

loves(andy, julia).
loves(andrew, maria).
loves(bob, sofia).
loved(juila).
loved(maria).
loved(sofia).

我想要两个谓词:

do_love(X, Y) :- ...
is_loved(X, Y) :- ...

返回 Y 作为人名,X 作为事实本身。对于喜爱的事实,我写道:

is_loved(X, Y) :- X = loved(Y), X.

正如预期的那样,返回:

is_loved(X,Y).
X = loved(juila),
Y = juila ;
X = loved(maria),
Y = maria ;
X = loved(sofia),
Y = sofia.

但是,当我以类似的方式编写 loves 事实的谓词时:

do_love(X, Y) :- X = loves(X, Y), X.

它为查询返回 false:

do_love(X,Y).
false.

我是序言新手,不太明白为什么会出现这种情况。 为什么 is_loved 查询有效,而 do_love 查询无效?

最佳答案

问题是您试图将 X两个不同的值统一:

  • X = 爱(...)
  • 喜欢(X,...)

(我使用 ... 进行截断,因为这些部分与我所说的无关)。

换句话说,您的 do_love 谓词是说“X 必须与 loves 谓词统一”并且“X 必须与loves 谓词中的第一个参数”。根据您设置的数据集,没有任何一个值可以同时满足这两个要求。

根据您想要做什么,这可能就是您想要的:

do_love(X, Y) :- loves(X, Y).

旁注 1: 谓词不会像其他带有函数的语言那样“返回”值。您不需要在谓词中使用 , X 即可让它们发挥作用。

旁注 2: = 是一个“统一”运算符,而不是像其他语言那样的“赋值”运算符。请参阅this page了解更多信息。

关于prolog - 为什么我的谓词不起作用,而类似的谓词却起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60825285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com