总计函数(高阶函数)

时间:2012-01-02 12:53:54

标签: haskell

我需要定义这个名为total的函数。

total :: (Int -> Int) -> Int -> Int

这样总f就是n值给出的函数     f0 + f1 + .... + fn

感谢您的帮助!请。


根据这本书作为一个例子,我发现了关于功能组成:

twice f = (f . f)   

这里,f是一个函数,结果是f由它自己组成。为此,它需要具有相同的输入和输出类型。所以我们有

twice :: (a -> a) -> a -> a

这表明两次接受一个参数,类型函数(a - > a),并返回相同类型的结果。例如,如果successor是将一个添加到整数的函数,

successor :: Int -> Int
successor n = n + 1     
then
(twice successor) 12 ->(successor . successor) 12 
-> successor (successor 12) -> 14

2 个答案:

答案 0 :(得分:9)

一种简单的方法是:

total f 0 = f 0
total f n = total f (n-1) + f n

另一种选择是:

total f n = sum (map f [0..n])

答案 1 :(得分:8)

如果我理解你的问题,以下情况应该没问题

total f n = sum [ f i | i <- [0..n] ] 

但是,如果你定义函数递归,我想你会学到更多。 total n=0应该返回什么?嗯:那就是你的定义f 0。即。

total f 0 = f 0
  • 那么n=1呢?那是total f 1 = f 1 + total f 0 == f 1 + f 0
  • n=2total f 2 == f 2 + total f 1
  • 一般为n

看模式?你可以把它写成普通的Haskell。