我需要定义这个名为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)
一个简单的方法是:
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)
如果我理解你的问题,以下情况应该没问题
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.