这些序言语句是什么意思? (替换)

问题描述 投票:0回答:1

我刚刚开始学习 Prolog,我遇到了这个替换示例:

我们有替代品

S2 = {X= brother(maya), Y = friend(john)}
我们将
S2
替换为
friend(X, Y)
friend(X, Y) * S2
我们得到:
friend(brother(maya), friend(john))

这个例子中有很多地方我不明白。

  1. brother(maya)
    代表什么? “某人是玛雅的兄弟”应该表达为
    brother(X, maya)
    brother(maya)
    的意思是“玛雅是一个兄弟”,还是“玛雅有一个兄弟”?

  2. 据我所知,谓词的值是布尔值(true 或 false)。这是否意味着

    friend(brother(maya), friend(john))
    本质上是
    friend(true, true)
    ,这意味着什么?

预先感谢您的帮助。

prolog predicate substitution
1个回答
0
投票

brother(maya)
就像
ripplekilo(earboat)
- 带有名称和原子的 Prolog 术语。 Maya只是一个女性名字还是像英文中的Hilary?摩耶兄是和尚吗?如果它的含义超出了你通过阅读代码所能理解的范围,你需要询问作者或猜测。

“某人是 Maya 的兄弟”应表示为 Brother(X,maya)。

对于未绑定的变量,该术语更像是一个问题(查询)而不是一个陈述。正如你所说,当你无法从代码中读取含义时,这是没有帮助的,并且你的建议仍然不明确 - 兄弟(X,Y)哪个是兄弟?或者他们都有一个第三个兄弟?或者X是一个计数器,就像brother(3, maya)说Maya有三个兄弟一样?或者以某种方式链接到玛雅的第三个兄弟?理想情况下,名称描述了参数之间的关系,例如

brother_sister/2
siblings/2
可能更清晰,如果不是,那就是
% comments
的用途。

据我所知,谓词的值是布尔值(true 或 false)。这是否意味着朋友(兄弟(玛雅),朋友(约翰))本质上是朋友(真,真)

true
false
在 Prolog 中不是布尔值,它们也只是原子,Prolog 不允许您像其他语言嵌套函数调用一样嵌套查询,所以它们不等价。

至于它的含义,值得思考的是,01110001如何可以是数字113,或者字母

q
,或者十六进制对0x71,或者四次投票同意和四次分歧,或者摩尔斯电码中的
BV
。 . 符号不包含意义;计算机程序移动符号,这些词对 Prolog 没有意义 - 如果一致使用的话,如果它们是
sadf(whoeu,qfmoe)
,代码就会运行。据我们所知,
brother(X, maya)
可能意味着 Maya 是 X 公司的首席执行官。已经存在更糟糕的命名代码。

© www.soinside.com 2019 - 2024. All rights reserved.