问题标签 [zipper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - python字典和zip的最佳C++替代品是什么?
python 中 dict(zip(values...)) 的最佳 C++ 替代品是什么?
我正在辅导一个 C++ 学生,目前在我的课余时间,在我的工作中遇到了一段 Python 代码,发现我不知道最好的答案。
代码如下所示(我更改了变量的名称,并对其进行了一些概括,但这是相同的想法):
我已经使用 boost 用修剪过的标记化向量替换了剥离和拆分的单词,效果很好;但是,当我试图决定翻译 dict/zip 组合的最佳方式时,我不知所措。
haskell - 都是可区分的类型 Monad
给定一个可微类型,我们知道它Zipper
是一个Comonad
. 对此,丹·伯顿(Dan Burton)问道:“如果推导产生了一个单子,这是否意味着整合产生了一个单子?或者这是胡说八道吗?”。我想给这个问题一个具体的含义。如果一个类型是可微的,它一定是一个单子吗?给定以下定义,该问题的一种表述是问
我们可以编写具有类似签名的函数吗
遵守单子定律。
在链接问题的答案中,有两种成功的方法可以解决类似的Comonad
为Zipper
. 第一种方法是扩展Diff
类以包括对偶>>=
并使用偏微分。第二种方法是要求类型是两次或无限可微的。
xml - 在 Scala 中使用 Zipper 取消转义 XML
假设我需要对给定字符串中的 XML 转义字符进行转义:例如,我需要&
用&
、"
with "
、<
with<
等替换。我更喜欢纯粹的功能解决方案。
这样做有意义scalaz.Zipper
吗?Zipper
允许检查焦点右侧的字符并在向前移动时跳过它们。不会是矫枉过正吗?你会建议一个更简单的解决方案吗?
xml - Clojure 数据 zip xml 组合
这是一个示例来说明我想做的事情:
运行f1
会产生预期的结果:
运行f2
抛出异常:
我的目标是将处理分成几个步骤:
- 获取 xml
- 从 xml 中获取条目
- 从条目中获取标题
这样我就可以把事情分成不同的方法。例如,我可能需要提取属于 XML 不同部分的元素的不同属性,从而生成一个扁平的输出集合(例如,<id>
从 atom1 上获取所有元素,生成一个 ID 向量)。
我想要处理每种类型的节点的方法(在上面的示例中,从 获取 IDfeed
并从 获取 ID entry
)然后将它们链接起来。即从顶部下降,从每个级别中挑选东西,如果需要调用以相同方式进一步处理子项的方法(使用拉链)。
换句话说 - 我想:
- 创建一个拉链
- 将该拉链转发到一种处理方法
- 将拉链移动到特定位置
- 处理该位置
- 使用步骤 3 中设置的位置以相同的方式处理子项(步骤 2. - 5.)
但是,根据f2
. 如何才能做到这一点?如果这不是人们应该如何使用 clojure.data.zip.xml,那么在考虑分解的情况下,推荐的会是什么?
recursion - 重新创建一个扁平的树
我有一个地图矢量,我想以嵌套的方式进行转换。
数据结构如下:
每个映射都有一个:id
,一些其他的键和值对于这个讨论并不重要,:parent
键,表示元素是否属于另一个元素。如果:parent
为 0,则它是顶级元素。
我想嵌套这个扁平列表,以便属于父级的每个元素都存储在:nodes
父级映射中的一个键下,如下所示:
总而言之 - 我有一个扁平的树状结构,我希望再次变成一棵树。我尝试使用拉链来实现这一点,但未能处理任意嵌套级别。
clojure - 如何创建 Clojure 拉链
如何使用 Clojure Zipper ( vector-zip
) 创建下图:
我努力了
它返回
这样对吗?
clojure - Clojure 拉链到 EDN
我使用 Clojure Zipper 创建了下图
使用以下代码:
现在我想在 d3 中创建一个可视化,所以我想以 EDN 格式表示图形,例如,
我试过这个
唯一的问题是子 E & F,我无法跟踪它的父节点 D。
recursion - 由于拉链和 HOF,递归是一种气味(在惯用的 Clojure 中)吗?
经典著作The Little Lisper ( The Little Schemer ) 建立在两大理念之上
- 您可以以递归方式解决大多数问题(而不是使用循环)(假设您有尾调用优化)
- Lisp 很棒,因为它本身很容易实现。
现在有人可能认为这适用于所有 Lispy 语言(包括 Clojure)。问题是,这本书是当时(1989 年)的产物,可能在我们今天所拥有的高阶函数 (HOF) 函数式编程之前。(或者至少被认为适合本科生)。
递归的好处(至少部分)是易于遍历嵌套数据结构,如('a 'b ('c ('d 'e)))
.
例如:_
现在有了功能拉链——我们有一种遍历嵌套数据结构的非递归方法,并且可以像遍历任何惰性数据结构一样遍历它们。例如:_
现在看来,您可以使用以下任一方法解决任何嵌套列表遍历问题:
- a
zipper
如上,或 - a
zipper
遍历结构并返回一组键,可让您使用assoc
.
假设:
- 我当然假设数据结构是固定大小的,并且在遍历之前完全知道
- 我不包括流数据源方案。
我的问题是:由于拉链和 HOF,递归是一种气味(在惯用的 Clojure 中)吗?