![]() |
1
2
这是斯卡拉的素描。无论您的语言是什么,您首先必须以某种方式表示类似树的数据结构:
唯一重要的部分是保持整数数组的叶节点和保持其子节点在数组中的内部节点之间的区别。这个
现在您基本上想要构建一个编码器解码器,其中
恢复结构也不是那么困难。我决定通过传递一个显式的
您的示例:
以下是它看起来像ASCII树:
现在从另一个数组中重建形状相同的树:
这给了你:
我希望这对于那些用不太远程的ML子代进行功能编程的人来说或多或少是可以理解的。 |
![]() |
2
4
只需在结构中递归,并使用迭代器按顺序生成值:
|
![]() |
3
2
结果是 I've already answered 几个月前你的问题,无论如何都很相似。 那里的代码需要稍微调整一下,使其适合这里。方案中:
第一个参数是值的线性列表,第二个参数是要重新创建其结构的嵌套列表。确保线性值列表中有足够的元素是 在你身上 . 我们称之为
在链接的答案中有一些措辞,解释了正在发生的事情。短篇小说,写在 CPS - continuation-passing 风格:
我们处理嵌套结构的一部分,同时用线性供应的值替换叶;然后用剩余供应处理结构的其余部分;然后我们将处理这两个子部分得到的两个结果结合起来。对于类似lisp的嵌套列表,它通常是
这就是Bergi的代码所做的,本质上,但是以一种功能性的风格。 在与伪代码匹配的假想模式中,它可能更容易阅读/跟踪
这种通过计算来处理一个变化状态的计算模式正是monad状态的意义所在;使用haskell
|
![]() |
John Smith · Java按值对映射进行分组,其中值为列表 2 年前 |
![]() |
r3k0j · 在c++中有没有办法将输入字符串转换为输入流? 2 年前 |
![]() |
Ankur · 猛击猫管据称行为不端 2 年前 |
![]() |
Ksenia Alexeeva · 什么是产量控制器。流动 2 年前 |
![]() |
tooFastForSatan · 组合两个流并调用方法 2 年前 |
![]() |
Logan Lee · 通过在jq中一对一比较两个流进行过滤 2 年前 |
![]() |
Lev · 使用jOO按属性总结BigDecimal分组 6 年前 |