一个关于匿名变量在给定一组程序规则的 Prolog 查询解析中扮演什么角色的快速而简单的问题。因此,按照我理解 SLD 解析的最简单形式如何工作的方式,SLD 树是通过从一组目标术语中获取一些术语(基于选择规则,例如 FIRST)并遍历所有程序规则以查看哪个规则的左手边(可以这么说的结果)可以与手头的术语统一。统一两个给定项的方法是取两个项的差异集,看看是否可以用变量替换项,使差异消失,你可以通过连续取最左边的单个差异并检查是否,在两个集合中构成差异,
现在,当匿名变量 (_) 发挥作用时,我怀疑正确有效地执行此操作的诀窍在于改变确定两个术语之间最左边差异的方式,以便在其中一个是匿名变量时忽略一对术语。显然正确的方法是重命名目标中 _ 的每个实例,并将程序设置为新的变量名并使用它们来解决。
它实际上是如何完成的?我的想法是否足够,或者还有更多?(此外,如果在我理解 SLD 解析工作的方式中缺少某些东西,我将不胜感激,除非否定、调用、封装、算术谓词和更复杂的东西。)