我正在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
但与我的幻灯片不同。
有人可以澄清吗?
答案 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