我正在研究二进制树。
我知道结构,但我在幻灯片中不了解此代码:
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
,但与我的幻灯片不同。
任何人都可以澄清一下吗?
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