我想创建应该以这种方式声明的函数allSum
allSum:: (Int->Int)->(Int->Int)
这是应该做的:
(allSum f) n = f (0 )+ f (1)+ f (2) +…+ f (n)
这是我的尝试:
sum1 = foldr (+)0
allSum:: (int->int) -> (int->int)
allSum f = \n -> ( sum1 [ f(x)| x <-[0..n]])
然而,它不起作用,我不知道为什么。
答案 0 :(得分:2)
如果您将int
更改为Int
,则可以正常使用:
sum1 = foldr (+) 0
allSum :: (Int -> Int) -> (Int -> Int)
allSum f = \n -> sum1 [ f(x) | x <- [0..n] ]
在旁注中,您可以将allSum
功能编写为:
allSum :: (Int -> Int) -> (Int -> Int)
allSum f = \n -> sum . fmap f $ [0..n]