Haskell中的闭包和列表推导

Zak*_*kum 6 closures haskell coding-style 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]
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*ony 10

惯用的Haskell会 filter (> 4) [1..7]

请注意,您没有捕获闭包中的任何词法范围,而是使用分段运算符.也就是说,您需要部分应用>,哪些操作员部分会立即为您提供.列表理解有时是有吸引力的,但通常的看法是它们不像通常的高阶函数套件那样精确地缩放(对于更复杂的组合,"缩放").当然,这种风格决定在很大程度上是主观的,所以YMMV.