我想建立一个谓语(序言),其采用一棵树,并返回一个列表的列表,并且每个列表是一个树路径。 该树被定义为树(根,LeftTree,RightTree)。 你有什么建议吗?
Answer 1:
这是相当不寻常的(这是比较常见的要求,例如对一棵树和它的所有节点,其DCG中是一个不错的选择的平面列表之间的关系),也许是这样的:
tree_list(nil, []).
tree_list(tree(Node,Left,Right), [Lefts,Node,Rights]) :-
tree_list(Left, Lefts),
tree_list(Right, Rights).
例:
?- tree_list(tree(a,tree(b,nil,tree(d,nil,nil)),tree(c,nil,nil)), Ts).
Ts = [[[], b, [[], d, []]], a, [[], c, []]].
这表示是浪费(你知道,所有的非空列表将有3个要素,那么为什么不使用,而不是一个列表?三元项)和不必要的我认为(因为你已经有了摆在首位树表示),但谁知道它是什么好...
文章来源: Tree path in a List of Lists