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