【问题标题】:binary heap to List二进制堆到列表
【发布时间】:2012-08-29 19:53:15
【问题描述】:

试图将树结构附加到列表中。在 Erlang 中,我会使用 ++ 运算符进行追加,但在 Prolog 中执行此操作时会不断出现语法错误。

我将包含我的错误代码,它完全是关于我认为缺少的列表的附加。

tree2list(leaf(X),L++[X]).
tree2list(branch(Branch1,Branch2),L):-
tree2List(B1,L1),
tree2List(B2,L2),
L++L1++L2.

任何想法如何解决我的附加问题?

【问题讨论】:

  • Prolog 中没有++ 运算符。使用append/3。请注意,Prolog 与 Erlang 只是表面上的相似。你最好拿一本好的 Prolog 书。

标签: list tree prolog append binary-tree


【解决方案1】:

当然,使用差异列表:

tree2list(leaf(X),[X|A]-A).
tree2list(branch(B1,B2),L-Z):-
        tree2list(B1,L-A),
        tree2list(B2,A-Z).

/* 7 ?- tree2list(branch(leaf(1),leaf(2)), L-[]).
L = [1, 2] ;
No
8 ?- */

但是你的树似乎没有空树枝。这样添加它们:

tree2list(empty,A-A).

/* 10 ?- tree2list(branch(branch(leaf(1),leaf(2)),empty), L-[]).
L = [1, 2] ;
No
11 ?- */

【讨论】:

  • 同意我的树没有空树枝,到目前为止我还没有考虑过。有关如何处理此问题的任何提示?
  • 如果我有一个像 branch(leaf(A),branch(leaf(AA),leaf(AAA))) 这样的树形结构,我将其作为输出 L = [A, AA, AAA|_G6667] -_G6667 好像把A引用的“错误”打印出来了。
  • 对,注意我是怎么称呼它的:tree2list(...., L-[])。这可能超出您的想象,如果您不熟悉 Prolog,差异列表不是入门材料。很抱歉。
  • 你知道怎么去掉“_G6667]-_G6667”这个信息吗?
  • 是的,这样称呼它:tree2list(...., L-[])不要将其称为tree2list(...., L)
猜你喜欢
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 2021-03-21
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多