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