Prolog 中的树
Trees in Prolog
我正在研究 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
但与我的幻灯片不同。
谁能澄清一下?
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
我正在研究 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
但与我的幻灯片不同。
谁能澄清一下?
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