问题标签 [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.
haskell - 有没有像 cata 但你可以匹配内部结构的东西?
我有这种语言 AST
我想把它转换成字符串
但是当使用 lambda 时,Apply
我需要括号
但我无法将内部结构与 cata 匹配
还有比这更好的解决方案para
吗?
它看起来更丑陋。即使只在一个地方需要它,我也需要在任何地方删除 fst 元组参数,我想它会更慢。
haskell - gpostpro 如何“逃离单子”?
我试图了解 Haskellrecursion-schemes
包中这个非常抽象的递归函数是如何工作的(或者,实际上,它是做什么的!) - 从这个文件:
特别是,我想了解的是:它如何应用g
提到 monad 类型构造函数的函数m
,然后返回一个t
没有提到或依赖的类型的值m
?我认为在 Haskell 中从任意 monad 中逃脱是不可能的!
我首先将源文件加载到 Intero 以尝试使用它的 type-at-point 功能,但该尝试失败了。
然后我使用 将它加载到 GHCi 中cabal repl
,并尝试通过组合函数一次一个地跟踪类型,使用 GHCi 通过注释掉定义的各个位来帮助进行类型推断。但是,当我到达 时fmap
,我无法确定要注释掉的内容,因为如果我取消注释递归a
调用但注释掉其他内容,我认为它甚至可能无法编译,因为部分注释掉的定义a
不会有正确的类型。
scala - 优化自由单子
如果我有一个 value a: Free[Op, A]
,是否可以“展平”结构,a
以便Op
由自由 monad 绑定在一起的两个 s 可以折叠成一个?
上下文:我想在解释之前将其作为优化步骤执行,因为它的语义Op
是它的操作是幂等的。因此,如果两个“连续”出现,则可以在不影响程序语义的情况下消除第二个。
haskell - 为什么要评估变质产生的未使用价值?
我希望以下代码会立即运行并退出,因为p
它从未实际使用过,而是运行了 7 分钟以上,然后似乎被 os.
我认为这与绑定运算符有关,但以下代码需要 9 秒才能运行:
此代码立即退出:
haskell - 如何将 CoFree 混合到 F 代数变质中?
首先,这建立在https://www.schoolofhaskell.com/user/bartosz/understanding-algebras 因此如果不熟悉代数和递归方案,请阅读上下文。
假设我有一个简单的表达式解析器:
它可能会成功,也可能不会成功。例子:
我的问题是,如果有人
1) 更新parse
函数以使用解析位置注释节点
2) 用解析位置前缀错误消息
我如何将下面的这些新功能与上面的功能集成在一起?
示例用法:
这会是一个zygomorphism吗?也许是组织同态?两者都需要某种类型的扭曲。
加分点:我应该使用 elgot 代数在失败时短路,看到评估可以返回Left String
吗?
haskell - Haskell 高阶函数
我在 Haskell 中有一个关于高阶函数的作业,但我在开始时遇到了一些麻烦。
如果我能在第一个问题上得到一些帮助和解释,我相信我能完成剩下的。
使用高阶函数(
map
、fold
或filter
),如有必要,使用 lambda 表达式,编写函数f1
等f2
f1 (f2 (*) [1,2,3,4]) 5 ~> [5,10,15,20]
我在想我必须使用部分应用map
,这样[1,2,3,4]
就变成了[(*1),(*2),(*3),(*4)]
?
haskell - 在 Fix 上的 mapAccumR 类递归方案?
我正在使用 中的功能recursion-schemes
,并努力弄清楚它是否提供了通用的东西mapAccumR
。足以实现的功能,例如:
...在一个Fix
-ed 结构的单遍中,例如:
zygo
似乎几乎是我想要的,除了我需要访问最终结果b
(上例中的最终总和)。
我的实际用例是在注释时对 AST 进行类型检查,并返回表达式的类型。
haskell - 在已经是 Functor 的数据类型上使用“Fix”的递归方案?
仍在使用我的文本编辑器Rasa。
目前我正在构建用于跟踪视口/拆分的系统(类似于 vim 拆分)。对我来说,将这个结构表示为一棵树似乎很自然:
这很好用,我将我View
的 s 存储在树中,然后我可以遍历/fmap 来改变它们,它也与镜头包非常吻合!
我最近一直在学习递归方案,这似乎对他们来说是一个合适的用例,因为树是一个递归数据结构。
我设法弄清楚它足以构建 Fixpoint 版本:
但是,现在 Functor 实例被r
;
我尝试了一些变体
但它令人窒息,因为 window 是一个类型的同义词。
和:
这也失败了;
- 是否仍然可以定义 fmap/traverse over
a
?或者我是否需要使用递归方案原语来执行这些操作?我要实现双函子吗?实例实现会是什么样子?
其余类型都在这里,项目无法编译,因为我没有合适的 Functor 实例用于 Window...
谢谢!!
scala - 在 Scala 中高效实现 Catamorphisms
对于表示自然数的数据类型:
在 Scala 中,这是实现相应catamorphism的基本方法:
但是,由于对 cata 的递归调用不在尾部位置,因此很容易触发堆栈溢出。
有哪些替代实施选项可以避免这种情况?除非代码最终呈现的界面看起来和上面一样简单,否则我宁愿不走F 代数的路线。
编辑:看起来这可能是直接相关的:是否可以使用延续来使 foldRight 尾递归?
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
有没有更好的方法来实现reduceBy
using recursion-schemes
?这些alter
论点似乎很脆弱,cata
在那里真的合适吗?我听说有些东西可以作为ana
和cata
.