我需要定义这个名为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
答案 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=2
:total f 2 == f 2 + total f 1
。n
?看模式?你可以把它写成普通的Haskell。