Questions tagged «combinators»

18
什么是Y组合器?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 Y组合器从事物的“功能”方面讲是计算机科学概念。大多数程序员甚至对组合器一无所知。 什么是Y组合器? 组合器如何工作? 它们有什么用? 它们在程序语言中有用吗?

4
带有无限列表的foldl与foldr行为
此问题中 myAny函数的代码使用文件夹。当满足谓词时,它将停止处理无限列表。 我用foldl重写了它: myAny :: (a -> Bool) -> [a] -> Bool myAny p list = foldl step False list where step acc item = p item || acc (请注意,step函数的参数正确颠倒了。) 但是,它不再停止处理无限列表。 我试图按照Apocalisp的回答来跟踪函数的执行: myAny even [1..] foldl step False [1..] step (foldl step False [2..]) 1 even 1 || (foldl step …

1
工人的组合器说明
什么是组合器? 是“没有自由变量的函数或定义”(在SO上定义)吗? 还是这样呢?据约翰·休斯(John Hughes)在他关于箭头的著名论文中所说,“组合器是从程序片段中构建程序片段的函数”,这是有优势的,因为“ ...使用组合器的程序员构造了许多所需的自动编程,而不是手工编写每个细节”。他继续说map和filter是这样的组合子的两个常见的例子。 一些符合第一个定义的组合器: 小号 ķ ÿ 《嘲笑一只模仿鸟》中的其他人(我可能是错的-我没有读过这本书) 一些符合第二个定义的组合器: 地图 过滤 折叠/减少(大概) >> =,compose,fmap ?????中的任何一个 我对第一个定义不感兴趣-那些定义不会帮助我编写一个真实的程序(如果您确信我错了,则为+1)。 请帮助我理解第二个定义。我认为map,filter和reduce很有用:它们使我可以进行更高级别的编程-错误更少,代码更短,更清晰。以下是一些有关组合器的具体问题: 还有哪些组合器示例,例如地图,过滤器? 编程语言通常实现哪些组合器? 组合器如何帮助我设计更好的API? 如何设计有效的组合器? 与非功能语言(例如Java)中的组合器有什么相似之处,或者这些语言代替组合器使用什么? 更新资料 感谢@CA McCann,现在我对组合器有了更好的了解。但是一个问题仍然是我的症结所在: 使用大量使用组合器编写的功能程序与不使用组合器编写的功能程序有什么区别? 我怀疑答案是,繁重的组合版本更短,更清晰,更通用,但是如果可能的话,我希望进行更深入的讨论。 我还在寻找更多fold常见编程语言中的复杂组合器的示例和解释(即比复杂)。

7
foldl是尾递归的,那么foldr如何比foldl运行得更快?
我想测试foldl vs foldr。从我所看到的情况来看,由于尾部递归优化,您应该在可能的情况下使用foldl over foldr。 这很有道理。但是,运行此测试后,我感到困惑: 文件夹(使用时间命令时需要0.057s): a::a -> [a] -> [a] a x = ([x] ++ ) main = putStrLn(show ( sum (foldr a [] [0.. 100000]))) foldl(使用time命令时需要0.089s): b::[b] -> b -> [b] b xs = ( ++ xs). (\y->[y]) main = putStrLn(show ( sum (foldl b [] [0.. …

10
文件夹如何工作?
谁能解释foldr工作原理? 请看以下示例: Prelude> foldr (-) 54 [10, 11] 53 Prelude> foldr (\x y -> (x+y)/2) 54 [12, 4, 10, 6] 12.0 我对这些处决感到困惑。有什么建议?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.