问题标签 [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.

0 投票
4 回答
2889 浏览

python - python字典和zip的最佳C++替代品是什么?

python 中 dict(zip(values...)) 的最佳 C++ 替代品是什么?

我正在辅导一个 C++ 学生,目前在我的课余时间,在我的工作中遇到了一段 Python 代码,发现我不知道最好的答案。

代码如下所示(我更改了变量的名称,并对其进行了一些概括,但这是相同的想法):

我已经使用 boost 用修剪过的标记化向量替换了剥离和拆分的单词,效果很好;但是,当我试图决定翻译 dict/zip 组合的最佳方式时,我不知所措。

0 投票
2 回答
538 浏览

haskell - 都是可区分的类型 Monad

给定一个可微类型,我们知道Zipper是一个Comonad. 对此,丹·伯顿(Dan Burton)问道:“如果推导产生了一个单子,这是否意味着整合产生了一个单子?或者这是胡说八道吗?”。我想给这个问题一个具体的含义。如果一个类型是可微的,它一定是一个单子吗?给定以下定义,该问题的一种表述是问

我们可以编写具有类似签名的函数吗

遵守单子定律

在链接问题的答案中,有两种成功的方法可以解决类似的ComonadZipper. 第一种方法是扩展Diff类以包括对偶>>=并使用偏微分。第二种方法是要求类型是两次或无限可微的

0 投票
1 回答
159 浏览

haskell - stepping into zipper with `to` lens

I'm struggling with lens and zippers. Consider below code run in ghci

Having data A t = A t, how can I create type of zipper like: Control.Monad.MonadPlus m => m (Zipper Top Int [Int] :>> A Int)?

I tried within (ix 1 . to A) $ zipper ([1,2,3] :: [Int]) but it gives an error:

0 投票
1 回答
154 浏览

haskell - 拉链:映射到最后一个面包屑

我在使用zipperslens时遇到了问题。考虑以下示例:

如您所见,我可以从Top :>> ATop :>> A :>> ATop :>> A :>> B

有了ab镜头,我如何在不使用的情况下从Top :>> A :>> A( zAA) 移动到Top :>> A :>> B( ) - 只是将镜头映射到最后一个面包屑上?zABupward

0 投票
1 回答
105 浏览

xml - 在 Scala 中使用 Zipper 取消转义 XML

假设我需要对给定字符串中的 XML 转义字符进行转义:例如,我需要&amp;&&quot;with "&lt;with<等替换。我更喜欢纯粹的功能解决方案。

这样做有意义scalaz.Zipper吗?Zipper允许检查焦点右侧的字符并在向前移动时跳过它们。不会是矫枉过正吗?你会建议一个更简单的解决方案吗?

0 投票
1 回答
678 浏览

xml - Clojure 数据 zip xml 组合

这是一个示例来说明我想做的事情:

运行f1会产生预期的结果:

运行f2抛出异常:

我的目标是将处理分成几个步骤:

  • 获取 xml
  • 从 xml 中获取条目
  • 从条目中获取标题

这样我就可以把事情分成不同的方法。例如,我可能需要提取属于 XML 不同部分的元素的不同属性,从而生成一个扁平的输出集合(例如,<id>从 atom1 上获取所有元素,生成一个 ID 向量)。

我想要处理每种类型的节点的方法(在上面的示例中,从 获取 IDfeed并从 获取 ID entry)然后将它们链接起来。即从顶部下降,从每个级别中挑选东西,如果需要调用以相同方式进一步处理子项的方法(使用拉链)。

换句话说 - 我想:

  1. 创建一个拉链
  2. 将该拉链转发到一种处理方法
  3. 将拉链移动到特定位置
  4. 处理该位置
  5. 使用步骤 3 中设置的位置以相同的方式处理子项(步骤 2. - 5.)

但是,根据f2. 如何才能做到这一点?如果这不是人们应该如何使用 clojure.data.zip.xml,那么在考虑分解的情况下,推荐的会是什么?

0 投票
3 回答
404 浏览

recursion - 重新创建一个扁平的树

我有一个地图矢量,我想以嵌套的方式进行转换。

数据结构如下:

每个映射都有一个:id,一些其他的键和值对于这个讨论并不重要,:parent键,表示元素是否属于另一个元素。如果:parent为 0,则它是顶级元素。

我想嵌套这个扁平列表,以便属于父级的每个元素都存储在:nodes父级映射中的一个键下,如下所示:

总而言之 - 我有一个扁平的树状结构,我希望再次变成一棵树。我尝试使用拉链来实现这一点,但未能处理任意嵌套级别。

0 投票
1 回答
160 浏览

clojure - 如何创建 Clojure 拉链

如何使用 Clojure Zipper ( vector-zip) 创建下图:

我努力了

它返回

这样对吗?

0 投票
2 回答
287 浏览

clojure - Clojure 拉链到 EDN

我使用 Clojure Zipper 创建了下图

使用以下代码:

现在我想在 d3 中创建一个可视化,所以我想以 EDN 格式表示图形,例如,

我试过这个

唯一的问题是子 E & F,我无法跟踪它的父节点 D。

0 投票
2 回答
301 浏览

recursion - 由于拉链和 HOF,递归是一种气味(在惯用的 Clojure 中)吗?

经典著作The Little Lisper ( The Little Schemer ) 建立在两大理念之上

  1. 您可以以递归方式解决大多数问题(而不是使用循环)(假设您有尾调用优化)
  2. Lisp 很棒,因为它本身很容易实现。

现在有人可能认为这适用于所有 Lispy 语言(包括 Clojure)。问题是,这本书是当时(1989 年)的产物,可能在我们今天所拥有的高阶函数 (HOF) 函数式编程之前。(或者至少被认为适合本科生

递归的好处(至少部分)是易于遍历嵌套数据结构,如('a 'b ('c ('d 'e))).

例如:_

现在有了功能拉链——我们有一种遍历嵌套数据结构的非递归方法,并且可以像遍历任何惰性数据结构一样遍历它们。例如:_

现在看来,您可以使用以下任一方法解决任何嵌套列表遍历问题:

  • azipper如上,或
  • azipper遍历结构并返回一组键,可让您使用assoc.

假设:

  • 我当然假设数据结构是固定大小的,并且在遍历之前完全知道
  • 我不包括流数据源方案。

我的问题是:由于拉链和 HOF,递归是一种气味(在惯用的 Clojure 中)吗?