我有一个我们不应该使用任何更高阶函数的赋值,列表理解是否可以归类为更高阶函数?
答案 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。)
列表推导是表示列表值而不是函数的表达式。所以答案是:不。