Prolog复合项合一问题:uncle(brother(W), Q)与uncle(john, mother(S))能否合一
Prolog复合项合一问题解答
核心合一规则先明确
Prolog中任意两个项可合一的判定标准如下:
- 两个原子/常量:仅当二者完全相等时可合一
- 单个自由变量:可与任意项合一,合一后变量绑定为对应项
- 两个复合项:需同时满足三个要求:
- 顶层函子名称完全一致
- 函子的元数(参数数量)完全一致
- 所有对应位置的参数可逐一合一,且各参数的绑定替换不存在冲突
目标项合一校验过程
本次需要校验的两个复合项为:uncle(brother(W), Q) 和 uncle(john, mother(S))
第一步:顶层结构校验
两个项的顶层函子均为uncle,元数均为2,符合复合项合一的前两个要求,继续校验对应位置参数。
第二步:第一个参数位置校验
第一个位置的两个参数分别为:
- 左侧:
brother(W),属于带参数的复合项,函子名为brother,元数为1 - 右侧:
john,属于无结构的原子常量
两个参数均不是自由变量,且结构完全不匹配,直接触发合一失败,无需继续校验第二个参数。
最终结论:两个复合项无法合一。
函子与原子合一的常见误区
你疑惑的函子(复合项)和原子能否合一,只有一种情况成立:二者其中一方是自由变量。举例:
- 自由变量
X和brother(W)可合一,绑定关系为X = brother(W) - 自由变量
X和john可合一,绑定关系为X = john
如果双方都不是自由变量,复合项和原子的结构天然不兼容,永远无法合一,本次校验的第一个参数就属于这种情况。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

