Lisp 演绎检索器示例

Lisp 演绎检索器示例,lisp,Lisp,在Lisp中,假设我在知识库中有以下两条规则: (append nil ?x ?x) (<- (append (cons ?x ?l1) ?l2 (cons ?x ?l3)) (append ?l1 ?l2 ?l3)) 我们将得到结果”((cons a(cons b(cons c nil))) 这是我的Lisp类中的一个示例,我希望您能帮助我理解这个检索器。 谢谢。要理解这个问题,我认为您首先需要掌握两个关键概念:反向链接和统一 通过总体简化,下面是反向链接的工作原理:尝试是否可

在Lisp中,假设我在知识库中有以下两条规则:

(append nil ?x ?x)
(<- (append (cons ?x ?l1) ?l2 (cons ?x ?l3))
    (append ?l1 ?l2 ?l3))
我们将得到结果
”((cons a(cons b(cons c nil)))

这是我的Lisp类中的一个示例,我希望您能帮助我理解这个检索器。
谢谢。

要理解这个问题,我认为您首先需要掌握两个关键概念:反向链接和统一


通过总体简化,下面是反向链接的工作原理:尝试是否可以将目标(示例中“ask”的第一个参数)与任何规则的头部统一起来(注意不确定性);如果可以,将该规则的主体(可能为空)添加为子目标,并隐藏统一的结果(一组变量绑定)。递归地将上述过程应用于具有累积绑定的每个子目标,直到(1)没有适用的规则,这意味着证明失败,或(2)没有更多的子目标,这意味着证明成功。在后一种情况下,目标变量的绑定(第二个参数)这就是答案。

要理解这个问题,我认为你首先需要掌握两个关键概念:反向链接和统一


通过总体简化,下面是反向链接的工作原理:尝试是否可以将目标(示例中“ask”的第一个参数)与任何规则的头部统一起来(注意不确定性);如果可以,将该规则的主体(可能为空)添加为子目标,并隐藏统一的结果(一组变量绑定)。递归地将上述过程应用于具有累积绑定的每个子目标,直到(1)没有适用的规则,这意味着证明失败,或(2)没有更多的子目标,这意味着证明成功。在后一种情况下,目标变量的绑定(第二个参数)这就是答案。

这看起来像一个Lispy Prolog,可能是来自PAIP()。它肯定不是标准公共Lisp(或Scheme,或Emacs Lisp…)的一部分。如果您对它的来源更具体,我们可能会更有帮助。这看起来像一个Lispy Prolog,可能是来自PAIP()。它肯定不是标准通用Lisp(或Scheme,或Emacs Lisp…)的一部分。如果您对它的来源更详细,我们可能会更有帮助。
(ask '(append (cons a (cons b nil))
              (cons c nil)
              ?l)
     '?l))