Prolog中的树木

时间:2018-12-18 09:03:13

标签: tree prolog first-order-logic

我正在Prolog中研究二叉树。

我知道结构,但我不理解幻灯片中的代码:

binary_tree(void).
binary_tree(tree(_Element,Left,Right)) :-
  binary_tree(Left), binary_tree(Right).

这需要识别树的结构。

但是“ void”代表什么?

我尝试了此查询

?- binary_tree(a).
false.

并假设a是树的一个节点。

我正在关注此资源以进行了解:

https://sites.google.com/site/prologsite/prolog-problems/4

但与我的幻灯片不同。

有人可以澄清吗?

1 个答案:

答案 0 :(得分:2)

void是一个原子。它不能假设任何值(自身除外)。另外,根据您的谓词定义,a(也是原子)不是有效的树。以a作为其唯一节点的树将由复合词tree(a,void,void)表示:

| ?- binary_tree(tree(a,void,void)).

yes

作为另一个示例,带有节点a..g的平衡树将由以下术语表示(仅出于可读性而缩进):

   tree(a,
       tree(b,
           tree(d,void,void),
           tree(e,void,void)
       ),
       tree(c,
           tree(f,void,void),
           tree(g,void,void)
       )
    )

您可以使用binary_tree /1谓词再次验证该词是否是一棵树:

| ?- binary_tree(tree(a,tree(b,tree(d,void,void),tree(e,void,void)),tree(c,tree(f,void,void),tree(g,void,void)))).

yes