演绎猎犬示例

时间:2009-12-02 23:52:22

标签: lisp

在Lisp中,假设我在知识库中有这两个规则:

(append nil ?x ?x)
(<- (append (cons ?x ?l1) ?l2 (cons ?x ?l3))
    (append ?l1 ?l2 ?l3))

那么如果我们问

,怎么能推断出来呢?
(ask '(append (cons a (cons b nil))
              (cons c nil)
              ?l)
     '?l))

我们会得到结果'((cons a (cons b (cons c nil)))

这是我的Lisp课程中的一个例子,我希望你能帮我理解这个猎犬。 谢谢。

1 个答案:

答案 0 :(得分:1)

要理解这个问题,我认为您首先需要获得两个关键概念:向后链接统一

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

相关问题