我正在开发一个将树转换为整数列表的函数。我的问题是,当我只需要添加一个或两个整数时,我可以附加到列表中。但是我似乎无法在没有得到这个的情况下附加三个整数:
[[2], 3, 4]
,当我得到[2, 3, 4]
时。
我知道这个问题来自于这个陈述
append([Temp1 | Temp2] , Temp3, L)
其中Temp1,Temp2和Temp3是我想要添加的整数。 L是包含树中所有整数的主列表。
我尝试了两个append语句,但返回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).
答案 0 :(得分:1)
您的命名已关闭。变量看起来更好称为“标签”。然后,node3
应该有两个:
chopTree(leaf(_), []).
chopTree(node1(Label, Node), L) :-
chopTree(Node, Temp),
% append([], [Label | Temp], L).
L = [Label | Temp].
chopTree(node2(Label, Node1, Node2), L) :-
chopTree(Node1, Temp1),
chopTree(Node2, Temp2),
append(Temp1, [Label | Temp2], L).
chopTree(node3(Label1, Label2, Node1, Node2, Node3), L) :-
chopTree(Node1, Temp1),
chopTree(Node2, Temp2),
chopTree(Node3, Temp3),
append(Temp1, [Label1 | Temp2] , L1),
append(L1, [Label2 | Temp3], L).
也许node1
也不应该包含任何标签。无论如何,正如你所看到的,我们只需要两次调用append
,或者我们需要多次,就可以逐个构建结果列表。