用树表示Prolog知识库

用树表示Prolog知识库,prolog,logic,Prolog,Logic,我打算为知识库创建一个搜索算法。知识库最初采用规则的形式,例如: a :- b, c. a :- d b. d. 它可以表示为列表[[a,b,c],[a,d],[b],[d]]。或者,它可以表示为一棵树: [a] | ------------- | | [b,c] [d] | | [c] [ ] 然而,我不明白这些陈述背后的原因。这是Prolog中使用

我打算为知识库创建一个搜索算法。知识库最初采用规则的形式,例如:

a :- b, c.
a :- d
b.
d.
它可以表示为列表
[[a,b,c],[a,d],[b],[d]]
。或者,它可以表示为一棵树:

         [a]
          |
    -------------
    |           |
  [b,c]        [d]
    |           |
   [c]         [ ]
然而,我不明白这些陈述背后的原因。这是Prolog中使用的常见抽象吗?(我还是新手)。一位同学告诉我,它也可以被视为FSM,其中
[b,c]
[d]
是最终状态。但这似乎也没有意义,因为
[b,c]
没有子节点,而
[d]
有子节点


对于如何表示/查看知识库,是否存在一些共识?我很难找到每个表示之间的联系,以及它们的含义。我很抱歉我的问题含糊不清,但我对Prolog和知识库知之甚少,我不知道该如何提问。如果有帮助的话,这是一门人工智能课程。任何洞察都将不胜感激,谢谢

这要看情况而定。您将对这些数据进行何种查询?该树不是规则+事实的表示,而是“Prolog处理器”的传统最顶层第一深度优先搜索树(执行跟踪)的表示。要解决a,请先尝试b(成功),然后尝试c(失败)。再次尝试a,尝试d(搜索a的成功)。它当然也不是FSM,因为Prolog当然是“图灵完整的”,并且比FSM更强大,与C一样强大(例如)。看看Prolog解析机制()和统一()背后的思想: