Prolog查询-尝试理解此结果是如何发生的
所以我试图从Prolog中找出一些东西,但我不确定为什么我会得到我得到的结果。根据这一定义:Prolog查询-尝试理解此结果是如何发生的,prolog,Prolog,所以我试图从Prolog中找出一些东西,但我不确定为什么我会得到我得到的结果。根据这一定义: families(_, Smith, lucy, _, jeff, Smith). 此查询: ?- families(Ford, nancy, Ford, jeff, Smith, White). 为什么会有这样的结果 Ford = lucy, Smith = jeff, White = nancy. 谢谢大家! (注意:无需在开始括号后和结束括号前留空格。此外,如果这是家庭作业,你应该这样说。)
families(_, Smith, lucy, _, jeff, Smith).
此查询:
?- families(Ford, nancy, Ford, jeff, Smith, White).
为什么会有这样的结果
Ford = lucy,
Smith = jeff,
White = nancy.
谢谢大家! (注意:无需在开始括号后和结束括号前留空格。此外,如果这是家庭作业,你应该这样说。)
系列的定义/6
families(_, Smith, lucy, _, jeff, Smith).
说:
lucy
李>
jeff
统一起来?- families(Ford, nancy, Ford, jeff, Smith, White).
询问:
- 你能用同一个变量统一第一个和第三个参数吗,福特?
- 是的,你可以,现在
(定义中的3)Ford=lucy
- 是的,你可以,现在
- 第二个参数是否可以是atom
?nancy
- 是,并且
(定义中的2)White=nancy
- 是,并且
- 第四个参数是否可以是atom
?jeff
- 是的,但这没有任何影响(从定义中的1开始)
- 你能把第五个参数和变量Smith统一起来吗?
- 是,并且
(定义中的4)Smith=jeff
- 是,并且
families( _ , Smith, lucy, _ , jeff , Smith).
?- families( Ford, nancy, Ford, jeff, Smith, White).
现在,定义中的Smith
和查询中的Smith
不一样了!每个谓词实际上都有自己的“名称空间”,因为谓词的变量在谓词使用时被重命名。所以我们这里实际上有
families( _ , A , lucy, _ , jeff , A ).
?- families( Ford, nancy, Ford, jeff, Smith, White).
哪个匹配,产生替换
_=Ford, A=nancy, lucy=Ford, _=jeff, jeff=Smith, A=White.
i、 e
最后一个是
White=A
和A=nancy
的结果<代码>A本身不会被报告,因为它不是查询的逻辑变量之一。常量(所谓的原子)以小写字母开头。但有些名称以大写字母开头。把那些名字加引号。就像《史密斯》哦,我不想得到不同的结果或任何东西。这是一个来自一个类的老例子,在这个类中,我们得到了定义和查询,我们假设在纸上计算出结果。我把它打出来看看结果会是什么,但我不确定为什么会这样。这并不是说它失败了。。。结果是“福特=露西,史密斯=杰夫,怀特=南希”。我把它全部输入swipl以查看结果,但我不确定为什么会出现这样的结果。你的问题中一定有输入错误。如前所述,您的查询将迫使Smith
与nancy
和jeff
统一起来,这是不可能的。@hardmath I在这方面也失败了一分钟,但谓词中有变量。:)(…我甚至对你的评论投了更高的票):)太棒了,谢谢。这不是家庭作业,只是考试复习中的一个例子:)
Ford=lucy, Smith=jeff, White=nancy.