不使用导入的代码(我可以使用head,tail
,init
,last
,filter
,{{1} },map
,fold
,通常是基本的haskell函数)
我想用.
创建一个高阶函数int,类型hof :: [Integer->Integer]->(Integer->Integer)
(使用lambda)
实现以下数学公式
需要一些基本的启动指导,我考虑过在每次hof函数执行一次递归调用,该hof本身应实现一个适用于递归尾部调用的更改的数学公式(我给出了)。
一些应该产生的结果:
hof s = \n ->....
感谢阅读!
答案 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)]