Haskell程序将函数应用于列表[0..n]并对列表的元素求和

时间:2014-05-20 15:50:51

标签: haskell

我想创建应该以这种方式声明的函数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]])
然而,它不起作用,我不知道为什么。

1 个答案:

答案 0 :(得分:2)

如果您将int更改为Int,则可以正常使用:

sum1 = foldr (+) 0

allSum :: (Int -> Int) -> (Int -> Int)
allSum f = \n -> sum1 [ f(x) | x <- [0..n] ]

Live demo


在旁注中,您可以将allSum功能编写为:

allSum :: (Int -> Int) -> (Int -> Int)
allSum f = \n -> sum . fmap f $ [0..n]