Haskell-通过创建更高级别的函数来计算函数总和

时间:2019-04-02 20:13:37

标签: function haskell lambda

不使用导入的代码(我可以使用head,tailinitlastfilter,{{1} },mapfold,通常是基本的haskell函数) 我想用.创建一个高阶函数int,类型hof :: [Integer->Integer]->(Integer->Integer)(使用lambda) 实现以下数学公式

badly cropped photo of hand-written formula (很抱歉,它是手写的)

需要一些基本的启动指导,我考虑过在每次hof函数执行一次递归调用,该hof本身应实现一个适用于递归尾部调用的更改的数学公式(我给出了)。

一些应该产生的结果:

hof s = \n ->....

感谢阅读!

1 个答案:

答案 0 :(得分:0)

假设您有一系列功能:

fs = [f1, f2, f3, f4, f5] -- or more

现在,对于从0到无穷大的每个值i,我们想将一个fs的函数应用于对应的n - i,然后将该值除以2 i < / sup>,我们希望对得出的楼层求和。

hof fs = \n -> sum [ fi (n-i) `div` (2^i) | (fi, i) <- zip fs [0..]]

尽管[0..]是一个无限列表,但是zip fs [0..]的结果是有限的,受fs的长度的限制。

为避免对每个2的次幂重复进行乘法,请使用iterate函数计算要与fs[0..]一起压缩的序列。

hof fs = \n -> sum [fi (n-i) `div` k | (fi, i, k) <- zip3 fs [0..] (iterate (*2) 1)]