在prolog中声明树木的好方法?

时间:2011-04-13 17:26:54

标签: tree prolog

我在prolog中使用树(一般树,不限于二进制)。从我看到的小代码片段中,尽管在树上定义遍历等很容易,但定义树的实例并不容易。这样做有什么好办法?另外,我应该如何尝试在每个节点中包含单属性值?

2 个答案:

答案 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, []).