【发布时间】:2021-02-19 12:58:32
【问题描述】:
在我的演讲中,我们必须定义函数 squareOn 使得
foldr。
答案是
squareOn :: (Eq a, Num a) => [a] -> a -> a
squareOn = foldr (\x acc y -> if y == x then x*x else acc y) id
我不明白 foldr 是如何工作的,但我是 Haskell 中 lambda 表达式的新手。 acc 是 Haskell 的任何类型的函数吗?如果有人能解释squareOn 的工作原理,那就太好了。 :)
【问题讨论】:
-
acc只是一个变量名,如x和y。它是 accumulator 的缩写,在 Haskell 中很常见(惯用语?) -
acc不是 any 类型;它具体是a -> a类型之一,例如id。 -
所以,是的,
acc是这里的一个函数。
标签: function haskell lambda higher-order-functions fold