Haskell:列表理解是高阶函数吗?

tai*_*ion 4 haskell functional-programming list-comprehension list

我有一个我们不应该使用任何更高阶函数的赋值,列表理解是否可以归类为更高阶函数?

d3d*_*ave 13

Haskell中的列表理解只是语法糖.它在哈斯克尔报告2010定义在这里,像这样:

[ e | True ]          = [e]
[ e | q ]             = [ e | q, True ]
[ e | b, Q  ]         = if b then [ e | Q ] else []
[ e | p <- l, Q ]     = let ok p = [ e | Q ]
                            ok _ = []
                        in concatMap ok  l
[ e | let decls, Q ]  = let decls in [ e | Q ]
Run Code Online (Sandbox Code Playgroud)

注意在模式中使用的Q范围超过限定符(可以包括函数).所以答案是肯定的,列表理解是高阶的.

  • 在报告的[列表理解](https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-420003.11)部分中给出了一种可能的翻译(假设没有语言扩展),并且没有提到`莫纳德` 它确实使用`concatMap`,它恰好类似于monad的bind,但它可以是完全独立的.当然`concatMap`和`(>> =)`一样是高阶函数. (5认同)