haskell - Haskell 中的闭包和列表推导

标签 haskell coding-style closures list-comprehension

我现在正在玩 Haskell,因此偶然发现了列表理解功能。
自然,我会使用闭包来做这种事情:

Prelude> [x|x<-[1..7],x>4] -- list comprehension
[5,6,7]
Prelude> filter (\x->x>4) [1..7] -- closure
[5,6,7]

我仍然感觉不到这种语言,那么 Haskell 程序员会走哪条路呢?
这两种解决方案有什么区别?

最佳答案

惯用的 Haskell 将是 filter (> 4) [1..7]
请注意,您没有在闭包中捕获任何词法范围,而是使用分段运算符。也就是说,你想要>的部分应用,哪些运算符部分立即为您提供。列表推导有时很有吸引力,但通常的看法是它们的缩放不如通常的高阶函数套件(“缩放”相对于更复杂的组合)。当然,这种风格决定很大程度上是主观的,所以 YMMV。

关于haskell - Haskell 中的闭包和列表推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7651639/

相关文章:

JavaScript 闭包(this)

rust - Rust-从 `&str`转换为 `String`,然后使用闭包转换

引用外部对象的 Javascript 作用域

haskell - 具有更高种类类型的 GADT 类型推断

使用解析器组合器解析具有函数应用的表达式语法(左递归)

haskell - `Integer` 与 `Int64` 与 `Word64`

haskell - 使用 postgresql-simple 创建流式管道源

java - 如果(空!=变量)为什么不如果(变量!=空)

Oracle 编码标准特性实现

coding-style - 了解 Dijkstra 的莫扎特编程风格