recursion-schemes相关内容

利用Haskell中的递归方案解决变化制造问题

我正试图从blog on recursion schemes中理解组织同构。我在运行博客中提到的解决change making problem的例子时遇到了一个问题。 找零问题取一种货币的面额,并试图找到创造一笔给定货币所需的最小硬币数量。下面的代码摘自博客,应该可以计算出答案。 {-# LANGUAGE DeriveFunctor #-} module Main where impo ..

“代数"是什么意思在编程的上下文中是什么意思?

我在函数式编程和 PLT 圈子中多次听说过“代数"这个词,尤其是在讨论对象、共子、透镜等时.谷歌搜索这个术语给出了对这些结构进行数学描述的页面,这对我来说几乎是不可理解的.谁能解释一下余代数在编程上下文中的含义,它们的意义是什么,以及它们与对象和共子的关系? 解决方案 代数 我认为首先要了解代数的概念.这只是对群、环、幺半群等代数结构的概括.大多数时候,这些东西都是以集合的形式介绍的 ..

什么是 catamorphism,它可以在 C# 3.0 中实现吗?

我正在尝试了解 catamorphisms 并且我已经阅读了维基百科文章和F#主题系列中的前几篇文章F# 内部 博客. 我理解这是折叠的概括(即,将多个值的结构映射到一个值,包括将值列表映射到另一个列表).我认为折叠列表和折叠树是一个典型的例子. 是否可以使用 LINQ 的 Aggregate 运算符或其他一些更高阶的方法在 C# 中完成此操作? 解决方案 LINQ 的 Agg ..
发布时间:2022-01-02 13:39:59 C#/.NET

优化免费Monad

如果我有一个值 a:Free [Op,A] ,是否可以“展平" a 的结构,以便两个 Op 可能会折叠成一个吗? 上下文:我想在解释之前将其作为优化步骤执行,因为 Op 的语义是其运算是幂等的.因此,如果两个“连续"出现,则可以在不增加程序语义的情况下消除第二个. 解决方案 据我所知,Free Monad程序无法进行这种自省,因为它表示顺序计算,其中每一步都取决于另一步的结果. ..

递归方案允许递归调用之间的依赖关系(有序的同构吗?)

我对以更高阶的方式(递归方案)编写递归代码感兴趣,其中递归调用之间可能存在依赖关系. 作为一个简化的示例,考虑一个遍历整数树的函数,检查和是否小于某个值.我们可以对整个树求和并将其与最大值进行比较.另外,一旦超过最大值,我们就可以保持连续和短路: 数据树=叶子Nat |节点树sumLT :: Nat->树->布尔sumLT max t = sumLT'max t>0sumLT':: Nat ..

在Python中高效地生成词典序列

我想生成一个按字典顺序排列的数字序列,以使每个数字的总和是一个给定的常数.它有点类似于“子集和问题".例如,如果我想生成sum = 3的4位数字,那么我有一个像这样的序列: [3 0 0 0] [2 1 0 0] [2 0 1 0] [2 0 0 1] [1 2 0 0] ...依此类推. 我能够使用以下代码在Python中成功完成此操作: import ..

Agda的递归方案

不用说,Haskell的标准构造 newtype修复f =修复{getFix :: f(修复f) } cata ::(Functor f)=> (f a - > a) - >修复f - > cata f = f。 fmap(cata f)。 getFix 非常棒,非常有用。 试图在Agda中定义一个类似的东西(我只是为了完整起见) da ..
发布时间:2018-06-04 17:02:01 其他开发

递归计划的傻瓜?

我正在寻找一些非常简单,易于理解的递归方案和核心引力方案(变形,变形,变形等)的解释,它们不需要大量的链接或打开类别理论教科书。我确信我已经在无意识中重塑了这些方案中的许多,并且在编码过程中将它们“应用”在我的头脑中(我相信我们中的很多人都有),但我不知道(共)递归方案I使用被称为。 (好的,我说谎了,我刚刚读到了其中的一些,这引发了这个问题,但在今天之前,我没有任何线索。) 我认为这些概念 ..