【发布时间】:2014-01-26 05:38:05
【问题描述】:
我想构建一个谓词(Prolog),它接受一棵树并返回一个列表列表,每个列表都是一个树路径。树定义为 树(根,左树,右树)。 请问您有什么建议吗?
【问题讨论】:
我想构建一个谓词(Prolog),它接受一棵树并返回一个列表列表,每个列表都是一个树路径。树定义为 树(根,左树,右树)。 请问您有什么建议吗?
【问题讨论】:
这很不寻常(例如,更常见的是询问树与其所有节点的平面列表之间的关系,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 个元素,那么为什么不使用三元项而不是列表呢?)而且在我看来是不必要的(因为你已经在第一个有树表示地方),但谁知道它有什么好处......
【讨论】: