我正在研究将树转换为整数列表的函数。我的问题是,当我只需要添加一个或两个整数时,便可以追加到列表中。但是我似乎无法在没有得到这个的情况下附加三个整数:
[[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).
您的命名已关闭。该变量看起来更好,称为“标签”。然后,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
两次,或者需要多次调用,才能逐步构建结果列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句