我在prolog中使用树(一般树,不限于二进制)。从我看到的小代码片段中,尽管在树上定义遍历等很容易,但定义树的实例并不容易。这样做有什么好办法?另外,我应该如何尝试在每个节点中包含单属性值?
答案 0 :(得分:4)
这是家庭作业吗?
表示任意树结构的简单方法恕我直言,将每个节点表示为:
tree(Data,[ChildNode_1,...,ChildNode_n]).
叶子节点看起来像:
tree(Data,[]).
稍微专业化的二叉树可能看起来像
tree(Data,LeftChild,RightChild).
原子nil表示不存在的子节点,因此其叶节点看起来像
tree(Data,nil,nil).
一个只有左边孩子的节点,如
tree(Data,LeftChild,nil).
节点数据可以是任意结构。也许你希望它是一个键/值对:
tree(kvp(Key,Value),ChildNodes).
答案 1 :(得分:4)
关于你的评论“但问题是整棵树必须排成一行”:事实并非如此。您还可以使用多行来构造树,例如:
tree(Tree) :-
Tree = tree(Root, [Child,Leaf3]).
Child = tree(Node1, [Leaf1,Leaf2]),
Leaf1 = tree(Node2, []),
Leaf2 = tree(Node3, []),
Leaf3 = tree(Node4, []).