我尝试了另一篇文章中某人评论中关于如何将树更改为列表的建议。但是,我在某处(或某物)有未声明的变量,所以我列表中的值是 [_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/