列表树(更新)

标签 tree prolog flatten dcg

我尝试了另一篇文章中某人评论中关于如何将树更改为列表的建议。但是,我在某处(或某物)有未声明的变量,所以我列表中的值是 [_G667, _G673, _G679],而不是 [5, 2, 6],这是正确的答案。据我所知,所有操作都是正确的。

这是代码:

flatten( Item , []).

flatten( tree(Left, Val, Right), List) :-
  flatten(Left, List1),
  append(List1, [E], List2),
  flatten(Right, List3),
  append(List2, List3, List).

我使用的查询是:

?- flatten(tree(tree(nil, 2, nil), 5, tree(nil, 6, nil)), L).

有人看到变量问题吗?我认为它可能在第一行(带有 Item),但如果我将 Item 更改为 item,查询立即返回 false。

我只写过一些Prolog程序,所以这对我来说仍然是一个新概念。

最佳答案

我认为E应该更改为Val。就目前情况而言,Val 未使用(!),而 E 则不知从何而来。

此外,为了使其正常工作,您应该将 Item 更改为 nil

关于列表树(更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898709/

相关文章:

c - 如何遍历多路树

python - 将字典转换为数据框,键作为列名,键的值作为数据框的列值

algorithm - 具有某些公共(public)边的两个图上的最小生成树

delphi - 为什么 Delphi TTreeNodes 从根本上与 TCustomTreeView 绑定(bind)?

prolog - B-Prolog 中的表模式和回溯

prolog - ISO Prolog 程序中最小的复合项 `max_arity`

java - 展平嵌套数组。 ( java )

mongodb - 是否可以展平 MongoDB 结果查询?

R:深度最小生成树

Prolog - 加法乘法