我现在正在玩 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/