问题标签 [recursion-schemes]

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 投票
3 回答
165 浏览

haskell - 有没有像 cata 但你可以匹配内部结构的东西?

我有这种语言 AST

我想把它转换成字符串

但是当使用 lambda 时,Apply我需要括号

但我无法将内部结构与 cata 匹配

还有比这更好的解决方案para吗?

它看起来更丑陋。即使只在一个地方需要它,我也需要在任何地方删除 fst 元组参数,我想它会更慢。

0 投票
1 回答
297 浏览

haskell - gpostpro 如何“逃离单子”?

我试图了解 Haskellrecursion-schemes包中这个非常抽象的递归函数是如何工作的(或者,实际上,它是做什么的!) - 从这个文件

特别是,我想了解的是:它如何应用g提到 monad 类型构造函数的函数m,然后返回一个t没有提到或依赖的类型的值m?我认为在 Haskell 中从任意 monad 中逃脱是不可能的!

我首先将源文件加载到 Intero 以尝试使用它的 type-at-point 功能,但该尝试失败了

然后我使用 将它加载到 GHCi 中cabal repl,并尝试通过组合函数一次一个地跟踪类型,使用 GHCi 通过注释掉定义的各个位来帮助进行类型推断。但是,当我到达 时fmap,我无法确定要注释掉的内容,因为如果我取消注释递归a调用但注释掉其他内容,我认为它甚至可能无法编译,因为部分注释掉的定义a不会有正确的类型。

0 投票
1 回答
321 浏览

scala - 优化自由单子

如果我有一个 value a: Free[Op, A],是否可以“展平”结构,a以便Op由自由 monad 绑定在一起的两个 s 可以折叠成一个?

上下文:我想在解释之前将其作为优化步骤执行,因为它的语义Op是它的操作是幂等的。因此,如果两个“连续”出现,则可以在不影响程序语义的情况下消除第二个。

0 投票
1 回答
125 浏览

haskell - 为什么要评估变质产生的未使用价值?

我希望以下代码会立即运行并退出,因为p它从未实际使用过,而是运行了 7 分钟以上,然后似乎被 os.

我认为这与绑定运算符有关,但以下代码需要 9 秒才能运行:

此代码立即退出:

0 投票
0 回答
260 浏览

haskell - 如何将 CoFree 混合到 F 代数变质中?

首先,这建立在https://www.schoolofhaskell.com/user/bartosz/understanding-algebras 因此如果不熟悉代数和递归方案,请阅读上下文。

假设我有一个简单的表达式解析器:

它可能会成功,也可能不会成功。例子:

我的问题是,如果有人

1) 更新parse函数以使用解析位置注释节点

2) 用解析位置前缀错误消息

我如何将下面的这些新功能与上面的功能集成在一起?

示例用法:

这会是一个zygomorphism吗?也许是组织同态?两者都需要某种类型的扭曲。

加分点:我应该使用 elgot 代数在失败时短路,看到评估可以返回Left String吗?

0 投票
2 回答
324 浏览

haskell - Haskell 高阶函数

我在 Haskell 中有一个关于高阶函数的作业,但我在开始时遇到了一些麻烦。

如果我能在第一个问题上得到一些帮助和解释,我相信我能完成剩下的。

使用高阶函数(mapfoldfilter),如有必要,使用 lambda 表达式,编写函数f1f2f1 (f2 (*) [1,2,3,4]) 5 ~> [5,10,15,20]

我在想我必须使用部分应用map,这样[1,2,3,4]就变成了[(*1),(*2),(*3),(*4)]

0 投票
1 回答
135 浏览

haskell - 在 Fix 上的 mapAccumR 类递归方案?

我正在使用 中的功能recursion-schemes,并努力弄清楚它是否提供了通用的东西mapAccumR。足以实现的功能,例如:

...在一个Fix-ed 结构的单遍中,例如:

zygo似乎几乎是我想要的,除了我需要访问最终结果b(上例中的最终总和)。

我的实际用例是在注释时对 AST 进行类型检查,并返回表达式的类型。

0 投票
2 回答
540 浏览

haskell - 在已经是 Functor 的数据类型上使用“Fix”的递归方案?

仍在使用我的文本编辑器Rasa

目前我正在构建用于跟踪视口/拆分的系统(类似于 vim 拆分)。对我来说,将这个结构表示为一棵树似乎很自然:

这很好用,我将我View的 s 存储在树中,然后我可以遍历/fmap 来改变它们,它也与镜头包非常吻合!

我最近一直在学习递归方案,这似乎对他们来说是一个合适的用例,因为树是一个递归数据结构。

我设法弄清楚它足以构建 Fixpoint 版本:

但是,现在 Functor 实例被r;

我尝试了一些变体

但它令人窒息,因为 window 是一个类型的同义词。

和:

这也失败了;

  1. 是否仍然可以定义 fmap/traverse over a?或者我是否需要使用递归方案原语来执行这些操作?我要实现双函子吗?实例实现会是什么样子?

其余类型都在这里,项目无法编译,因为我没有合适的 Functor 实例用于 Window...

谢谢!!

0 投票
2 回答
252 浏览

scala - 在 Scala 中高效实现 Catamorphisms

对于表示自然数的数据类型:

在 Scala 中,这是实现相应catamorphism的基本方法:

但是,由于对 cata 的递归调用不在尾部位置,因此很容易触发堆栈溢出。

有哪些替代实施选项可以避免这种情况?除非代码最终呈现的界面看起来和上面一样简单,否则我宁愿不走F 代数的路线。

编辑:看起来这可能是直接相关的:是否可以使用延续来使 foldRight 尾递归?

0 投票
2 回答
194 浏览

haskell - Haskell 中的 RamdaJS reduceBy() 使用递归方案

recursion-schemes我使用库有以下代码:

用作let countBy = reduceBy (\case Nil -> 0 ; Cons a b -> succ b) id in countBy [42,5,5,8,8,8]. 该代码模仿http://ramdajs.com/docs/#reduceBy

有没有更好的方法来实现reduceByusing recursion-schemes?这些alter论点似乎很脆弱,cata在那里真的合适吗?我听说有些东西可以作为anacata.