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

Haskell: Are list comprehensions higher order functions?

我有一个作业,我们不应该使用任何高阶函数,列表理解可以归类为高阶函数吗?

Haskell 中的列表理解只是语法糖。它在 Haskell 2010 年报告 here 中定义如下:

[ 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 ]

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

“高阶”有特定的含义。如果一个函数的参数是一个函数(或returns一个函数),前者被称为高阶。(例如:map. )

列表推导是表示列表值的表达式,而不是函数。所以答案是:没有。