问题标签 [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 投票
2 回答
352 浏览

function - Scheme zipper 谓词函数

我正在尝试编写一个谓词函数,该函数在将列表定义为拉链时返回 TRUE。拉链被定义为一个正确的列表,其中每个元素都是一个只有两个元素的列表,并且可以是任何表达式。

一个例子是

我尝试首先检查参数列表是否已满并返回 false,然后检查列表的 car 到其元素长度,并通过我的函数将列表的 cdr 传回,但我无法让它运行。

知道我做错了什么以及如何解决吗?我还在学习计划。

0 投票
1 回答
298 浏览

xml - 在 Clojure 中如何在集合上应用函数

我正在尝试在一组标签上应用从 xml 中提取一个标签内容的功能。基本上,我正在尝试制作一个从 xml 中提取内容的函数,就像这样

到目前为止,我的解决方案看起来像这样

在 REPL 中,当我尝试将 func 应用于这样的标签时

我得到一个空集合()。

0 投票
5 回答
2898 浏览

haskell - 如何从 Haskell 中的语法规范构建抽象语法树?

我正在从事一个项目,该项目涉及在 Java 的一个非常小的子集中优化某些结构,并以 BNF 形式化。

如果我要在 Java 中执行此操作,我会使用 JTB 和 JavaCC 的组合来构建 AST。然后使用访问者来操纵树。但是,鉴于 Haskell 中有大量用于解析的库(parsec、happy、alex 等),我在选择合适的库时有点困惑。

所以,简单地说,当在 BNF 中指定一种语言时,哪个库提供了构建 AST 的最简单方法?在惯用的 Haskell 中修改这棵树的最佳方法是什么?

0 投票
1 回答
381 浏览

java - 文本编辑器的 Clojure 拉链结构(带有映射和数组)

我正在尝试在 clojure 中制作一个简单的文本编辑器,只是为了熟悉它。我正在考虑使用拉链来构建结构并导航和更新编辑器。

我正在考虑将编辑器的文本存储在文档中,例如:

所以我想制作一个能够轻松导航的拉链。也许拉链不是最好的?但我正在考虑从根开始。下去会带你到那个孩子的节点。所以文档的顶部是 id h1。

我有以下内容,但它不允许孩子成为一个数组:

它更期待类似的东西:

有什么想法吗?如果有人有任何建议,我愿意完全改变结构。

0 投票
0 回答
65 浏览

vb.net - Iconic.Zipper 文件

我正在使用 Ionic.Zip.ZipFile 读取文件检查是否存在,但返回编写的代码是 zip.Entries.Count,其中 zip 是 Ionic.Zip.ZipFile 的对象。

谁能建议 zip.Entries.Count 将返回什么?

谢谢

0 投票
1 回答
411 浏览

clojure - 以 Newick 格式懒惰地打印一棵树

我希望以Newick 格式打印一棵二叉树,显示每个节点到其父节点的距离。目前我没有遇到以下代码的问题,它使用常规递归,但是树太深可能会产生堆栈溢出。

我在当前实用程序(例如tree-seqand clojure.walk)中发现的问题是我必须多次访问内部节点,以插入逗号并关闭括号。我使用过clojure.zip,但没有设法编写惰性/尾递归实现,因为我需要为每个内部节点存储它们已经被访问过的次数。

0 投票
1 回答
377 浏览

haskell - Traversable 和拉链。必要性和充分性

每个类型T重载Traversable都会产生一个Zipper T。即实例 Traversable T的存在是Zipper T的充分条件。

有证据证明这也是必要条件吗?(我想它一定很琐碎,但到目前为止我还没有找到拉链的正式通用定义。)

0 投票
1 回答
827 浏览

json - 有没有更简洁的方法来使用 Argonaut 删除顶级 JSON 属性?

假设我有这个小Argonaut Json实例:

现在,我想删除键为viewed. 我发现以下工作,但它有点过于冗长。有没有比这更短的:

另外,在我看来,“提交”更改(undo)的方法的名称似乎有点误导?我应该如何解释这个名字?最初,我认为有一种方法可以撤消修改历史中的最后一次更改。

更新

我找到了一种解决方案。使用HCursor

但是,为什么undo命名的问题undo仍然悬而未决。

0 投票
1 回答
783 浏览

c++ - 在具有 O(1) 元素访问的 Haskell 中实现高效的拉链式数据结构

问题

我想创建一个数据类型,它允许快速访问和修改其元素。是否可以在 Haskell 中创建一个结构和函数,其执行速度与简单的 C++ 实现一样快?

问题详情

我正在用 Haskell 编写一个编译器。我已经用数据类型表示AST,让我们考虑以下一个:

每个 AST 节点都有一个唯一的标识符。我很想在 Haskell 中实现以下功能:

  • 一个函数getById,它将返回一个O(1)时间复杂度为选定 id 的 AST 节点。
  • 能够在结构上创建“焦点”并相互独立地修改焦点元素。所以我希望能够记住一些子树的焦点,并能够在O(1)时间复杂度上修改每个这样的焦点。

我在考虑Zippers,但它们有 3 个问题:

  1. 它们(据我所知)与简单的数据类型一起使用,比如二叉树,我们可以说,我们选择“左”或“右”分支。是否有任何简单的方法可以在上述复杂数据类型上使用它们?
  2. 我认为他们不允许我实现getById具有O(1)时间复杂度的功能,对吗?
  3. 我认为使用 Zippers 创建一些独立的焦点是不可能的。我所说的独立焦点是指焦点,这将允许我们修改数据类型的不同部分,而无需重新计算其他焦点(在 中O(1))。

C++ 的思维方式

在 C++ 中,我们将能够创建指向 AST 节点的指针数组nodePtrs。该函数nodeById将在 中执行O(1),只需访问*(nodePtrs[id]). 因为 C++ 结构是可变的,所以我们可以在没有任何限制的情况下修改它的元素O(1)

0 投票
3 回答
882 浏览

xml - 用于创建 xml 请求的拉链?

如何创建一个XML符合XSD这样一个请求的请求是有效的?

一种方法是创建整个请求,然后在XSD. 有没有办法在遍历架构时创建请求?

想到的第一个想法是 Zipper,但我真的不确定它们是否可以在这里使用。

也许我没有很好地理解它,但是如果已经定义了一些结构并且需要在该结构中进行更改,那么 Zipper 似乎很棒。拉链可以用于改变结构吗?(例如将序列附加到序列数组?)