combinators相关内容

什么是 Y 组合子?

Y 组合器是来自“功能"的计算机科学概念;事情的一面.大多数程序员根本不了解组合子,如果他们甚至听说过它们的话. 什么是 Y 组合子? 组合子是如何工作的? 它们有什么用? 它们在过程语言中有用吗? 解决方案 如果您准备好长时间阅读,Mike Vanier 有一个很棒的解释.长话短说,它允许您用一种本身不一定支持递归的语言来实现递归. ..

Haskell 中的并行映射

是否有一些 map 的替代品来并行评估列表?我不需要它偷懒. 类似:pmap :: (a -> b) ->[a] ->[b] 让我 pmap 昂贵的函数 big_list 并让我的所有内核都达到 100%. 解决方案 是的,参见 并行包: ls `using` parList rdeepseq 将通过 rdeepseq 策略并行评估列表中的每个元素.请注意,如果您的元素太便宜而无 ..
发布时间:2021-12-30 21:27:08 其他开发

使用 foldr 实现 zip

我目前正在阅读 Real World Haskell 的第 4 章,我正在尝试将我的头脑围绕在 在foldr 方面实现foldl. (这是他们的代码:) myFoldl :: (a -> b -> a) ->->[b] ->一个myFoldl f z xs = foldr step id xs z其中步骤 x g a = g (f a x) 我想我会尝试使用相同的技术实现 zip,但我似 ..
发布时间:2021-12-14 12:05:00 其他开发

文件夹如何工作?

谁能解释一下 foldr 工作吗? 以这些例子为例: 前奏>文件夹 (-) 54 [10, 11]53前奏>foldr (\x y -> (x+y)/2) 54 [12, 4, 10, 6]12.0 我对这些处决感到困惑.有什么建议吗? 解决方案 foldr 从列表的右端开始,并使用您提供的函数将每个列表条目与累加器值组合起来.结果是累加器在所有列表元素中“折叠"后的最终值.它的 ..
发布时间:2021-12-14 11:54:24 其他开发

Data.MemoCombinators 是如何工作的?

我一直在查看 Data.MemoCombinators 但我真的看不出它的核心在哪里. 请向我解释所有这些组合器背后的逻辑是什么,以及它们如何在现实世界编程中加速您的程序的实际工作机制. 我正在寻找这个实现的细节,并且可以选择与其他 Haskell 记忆方法进行比较/对比.我了解记忆化是什么,并且我不寻找它的一般工作原理的描述. 解决方案 这个库是众所周知的记忆技术的直接组合. ..
发布时间:2021-12-14 11:50:38 其他开发

具有无限列表的 foldl 与 foldr 行为

中 myAny 函数的代码这个问题使用foldr.当谓词满足时,它停止处理无限列表. 我使用 foldl 重写了它: myAny :: (a -> Bool) -> [a] -> BoolmyAny p list = foldl step False list在哪里步骤 acc 项目 = p 项目 ||收货 (注意 step 函数的参数是正确反转的.) 但是,它不再停止处理无限列表 ..
发布时间:2021-12-14 11:35:37 其他开发

对于定点组合器 Y,什么是 \x.f(xx)

对于 Y 组合子定理, 对于每个函数 F 都存在一个 X 使得 FX=X 这里的 F 是什么意思?F(x) = x +1 的不动点是什么?我的理解是 x+1=x 没有解决方案? 对于下面的证明: 对于任何函数 F,令 W 为函数 λx.F(xx) 并令 X = WW.我们声称 X 是 F 的不动点. 证明如下X = WWX = λx.F(xx) WX = F(WW)X = 外汇 λ ..

像tap这样的组合方法,但能够返回不同的值?

我正在经历一个尝试避免临时变量和过度使用条件的阶段,我可以使用更流畅的编码风格.我非常喜欢在我想要获取需要返回的值的地方使用 #tap,但在返回之前先用它做一些事情. def fluid_methodsomething_complicated(a, b, c).tap do |obj|obj.update(:x => y)结尾结尾 对比.程序: def non_fluid_methodobj ..
发布时间:2021-07-11 19:31:19 其他开发

如何对字符串值格式的约束进行编码

正如我经常观察到的以及我经常实现 name 属性的方式,就是将其简单地建模为 String. 现在,如果名称必须遵循某种语法,即格式,该怎么办?在 Java 中,我可能会定义一个构造函数并检查其参数,例如: public Name(str: String) {if (str == null) throw new IllegalArgumentException("Str 不能为 null. ..
发布时间:2021-06-14 19:42:25 其他开发

如何手动推断'(.)的类型. (.). (.)'?

在Edward Kmett的演讲幻灯片,折叠和遍历中,“力量就是力量在点中",他显示(.) . (.) . (.)的类型为 (a -> b) -> (c -> d -> e -> a) -> c -> d -> e -> b 我可以通过在GHCI中显示其类型来查看它.但是我也想知道为什么.我想了解的另一件事是,为什么在参数从(.)到(.) . (.)和(.) . (.) . (.)的规 ..

定点组合器是否具有相互递归的功能?

是否存在用于创建相互递归函数元组的定点组合器? IE.我正在寻找类似Y-Combinator的东西,但是它需要多个“递归" *函数,并且将返回一个函数元组? *:当然不是真正的递归,因为它们被编写为以通常的Y-Combinator方式将自己(和兄弟姐妹)作为参数. 解决方案 您要寻找的生物是 Y * 组合器. 基于此页面由 oleg-at-okmij.org 我将 Y * 移植 ..

切割运行时计算值?

Cleave是用于最小化代码重复的真正有用的组合器.假设我要分类丰富,完善,不足的数字: USING: arrays assocs combinators formatting io kernel math math.order math.primes.factors math.ranges sequences ; IN: adp CONSTANT: ADP { "deficient" " ..
发布时间:2020-07-22 21:30:45 其他开发

Python的Parsec实现?

我最近使用Ply在Python中编写了一个解析器(这是yacc的python重新实现).当我几乎完成解析器的工作后,我发现我需要解析的语法要求我在解析过程中进行一些查找以告知词法分析器.如果不进行查询以通知词法分析器,就无法正确解析该语言中的字符串. 鉴于我可以从语法规则中控制词法分析器的状态,我想我将使用解析器模块中的查找表来解决用例,但是维护/测试可能变得太困难了.因此,我想了解其他一些 ..
发布时间:2020-05-25 01:05:21 Python