【发布时间】:2017-04-18 12:49:46
【问题描述】:
我正在研究一个将树转换为整数列表的函数。我的问题是,当我只需要添加一两个整数时,我可以追加到列表中。但我似乎无法在没有得到这个的情况下附加三个整数:
[[2], 3, 4],我应该得到[2, 3, 4]。
我知道问题源于此声明
append([Temp1 | Temp2] , Temp3, L)
其中 Temp1、Temp2 和 Temp3 是我要添加的整数。 L 是包含到目前为止树中所有整数的主列表。
我尝试使用两个附加语句,但返回的是 false 布尔值而不是 [2, 3, 4]。我尝试在[ | ] 周围移动,但我认为我对它们了解不够,无法有所作为。
append/3 页面也只会将两个列表合并为一个。任何帮助将不胜感激:)
编辑:我的代码如下,我添加了我的测试示例。
chopTree(leaf(_), []).
chopTree(node1(Leaf, Node), L) :-
chopTree(Node, Temp),
append([], [Leaf | Temp], L).
chopTree(node2(Leaf, Node1, Node2), L) :-
chopTree(Node1, Temp1),
chopTree(Node2, Temp2),
append(Temp1, [Leaf | Temp2], L).
chopTree(node3(_, Node1, Node2, Node3), L) :-
chopTree(Node1, Temp1),
chopTree(Node2, Temp2),
chopTree(Node3, Temp3),
append([Temp1 | Temp2] , Temp3, L).
query(E) :-
chopTree(node3(1,
node1(2, leaf(1)),
node2(3, leaf(1), leaf(1)),
node1(4, leaf(1))),
E).
【问题讨论】:
-
您的代码是...?确实包括谓词定义和查询。
-
抱歉,我认为这是一个更笼统的问题。我添加了我的代码以及我使用的查询。
-
为什么不直接写
L = [Temp1, Temp2, Temp3]呢?我错过了什么吗? -
我尽量避免使用
=,这是我的教授设置的限制。 -
查询的期望输出是什么,如图所示?是
[2,3,4]吗?
标签: list recursion tree prolog flatten