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

时间:2015-03-15 00:31:18

标签: list haskell functional-programming list-comprehension

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

2 个答案:

答案 0 :(得分:13)

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的使用,它在模式中超出限定符(可包括函数)的范围。所以答案是肯定的,列表理解是高阶的。

答案 1 :(得分:1)

“高阶”有一个特定的含义。如果一个函数接受一个函数的参数(或返回一个函数),前者被认为是更高阶。(例如:map。)

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