【问题标题】:Tree path in a List of Lists列表列表中的树路径
【发布时间】:2014-01-26 05:38:05
【问题描述】:

我想构建一个谓词(Prolog),它接受一棵树并返回一个列表列表,每个列表都是一个树路径。树定义为 树(根,左树,右树)。 请问您有什么建议吗?

【问题讨论】:

    标签: prolog dcg


    【解决方案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 个元素,那么为什么不使用三元项而不是列表呢?)而且在我看来是不必要的(因为你已经在第一个有树表示地方),但谁知道它有什么好处......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2012-10-23
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多