如何将1-2-3树扁平化为列表?

安德鲁

我正在研究将树转换为整数列表的函数。我的问题是,当我只需要添加一个或两个整数时,便可以追加到列表中。但是我似乎无法在没有得到这个的情况下附加三个整数:

[[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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将嵌套引用扁平化为简单目标?

Python-将列表的字典扁平化为唯一值?

如何将此包装的地图列表扁平化为另一种地图Java 8?

如何将 char(例如 "[1, 2, 3]" )转换为列表(例如 [1, 2, 3])

如何将依赖树的输出解析为扁平化的结构

试图将Reddit JSON扁平化为许多“对话”

什么是集合的非扁平化Scala向量:(1至2).flatMap((1至3).toSet.subsets(_))?

如何将Flow [T,Seq [Seq [String]],NotUsed]扁平化为Flow [T,Seq [String],NotUsed]

如何将不同格式的字典普遍扁平化为数据帧?

如何扁平化Kotlin中的列表列表?

如何将python列表转换为1/2行的元组列表?

如何将 2 个不同的列表加入 1 个列表

Python如何将1D列表打印为2D

如何将2个列表连接到1个模型中

Room 如何将 2 个实体作为 1 个实时数据列表?

将扁平化的 1 维索引转换为 2 维索引

C#LINQ:如何将string(“ [1、2、3]”)解析为数组?

如何将选项1和2中的输入打印到选项3?这是我的代码

如何将资源一起加载(例如/ tasks?ids = 1,2,3)?

如何将[元素,元素,元素]转换为[(1,element),(2,element),(3,element)]

如何扁平化Java中的地图内的列表8

如何在Java 8中扁平化列表

如何扁平化熊猫数据框列中的列表?

如何在RDD中扁平化列表?

如何使用 LINQ 扁平化字典列表

如何将列表视图添加到列,然后将剩余空间(如果有)与列表上方的 1/3 和列表下方的 2/3 进行划分

JsonPath / Jackson:如何将JSON数组反序列化为单个对象(“ [1,2,3]”-> Vector3d实例)?

如何将Mysql ASC命令1,2,3,4,5而不是1,10,11,12?

Python pandas:通过代理键将 JSON 扁平化为行的快速方法