总计函数(高阶函数)

Amj*_*jad -3 haskell

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

total :: (Int -> Int) -> Int -> Int
Run Code Online (Sandbox Code Playgroud)

因此总f是在值n给出和f0 + f1 + .... + fn的函数

谢谢你的帮助!请.


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

twice f = (f . f)   
Run Code Online (Sandbox Code Playgroud)

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

twice :: (a -> a) -> a -> a
Run Code Online (Sandbox Code Playgroud)

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

successor :: Int -> Int
successor n = n + 1     
then
(twice successor) 12 ->(successor . successor) 12 
-> successor (successor 12) -> 14
Run Code Online (Sandbox Code Playgroud)

Stu*_*etz 9

一个简单的方法是:

total f 0 = f 0
total f n = total f (n-1) + f n
Run Code Online (Sandbox Code Playgroud)

另一种选择是:

total f n = sum (map f [0..n])
Run Code Online (Sandbox Code Playgroud)


Dar*_*rio 8

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

total f n = sum [ f i | i <- [0..n] ] 
Run Code Online (Sandbox Code Playgroud)

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

total f 0 = f 0
Run Code Online (Sandbox Code Playgroud)
  • 那怎么样n=1?那是total f 1 = f 1 + total f 0 == f 1 + f 0.
  • 对于n=2:total f 2 == f 2 + total f 1.
  • 对于n一般的?

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