Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Haskell-通过创建高级函数来计算函数的和_Function_Haskell_Lambda - Fatal编程技术网

Function Haskell-通过创建高级函数来计算函数的和

Function Haskell-通过创建高级函数来计算函数的和,function,haskell,lambda,Function,Haskell,Lambda,不使用导入的代码(我可以使用head、tail、init、last、filter、map、fold,通常是基本的haskell函数) 我想创建一个高阶函数int,键入hof::[Integer->Integer]->(Integer->Integer),使用hofs=\ n->…(使用lambda) 它实现了以下数学公式 (对不起,这是手写的) 需要一些基本的启动指南,我考虑在每次调用hof函数时实现一个resourcivecall,hof本身应该实现一个适合递归尾部调用的修改后的数学公式(我

不使用导入的代码(我可以使用head、
tail
init
last
filter
map
fold
,通常是基本的haskell函数) 我想创建一个高阶函数int,键入
hof::[Integer->Integer]->(Integer->Integer)
,使用
hofs=\ n->…
(使用lambda) 它实现了以下数学公式

(对不起,这是手写的)

需要一些基本的启动指南,我考虑在每次调用hof函数时实现一个resourcivecall,hof本身应该实现一个适合递归尾部调用的修改后的数学公式(我给出了)

应产生的一些结果:

Main> map (hof [(+1)]) [1..10]
[2,3,4,5,6,7,8,9,10,11]

Main> map (hof [(+1),(+2)]) [1..10]
[3,4,6,7,9,10,12,13,15,16]

Main> map (hof [(2^),(2^),(2^),(2^),(2^)]) [5..12]
[42,85,170,341,682,1364,2728,5456]

Main> map (hof [(*2),(+100),(^3),negate,(mod 100)]) [24..40]
[2768,3151,3567,4020,4509,5038,5609,6221,6876,7575,8322,9117,9960,10855,11805,
12806,13863]

Main> map (hof [(mod 100),negate,(+100),(^3),(*2)]) [24..40]
[1181,1351,1562,1767,1989,2230,2490,2771,3071,3395,3774,4145,4539,4958,5402,5873,6369]

Main> map (hof [(‘mod‘ i) | i<-[50..100] ]) [1000..1030]
[23,24,27,28,30,32,35,36,39,40,37,38,40,41,44,45,47,48,52,53,55,31,33,35,37,39,42,
45,46,48,47]
Main>map(hof[(+1)])[1..10]
[2,3,4,5,6,7,8,9,10,11]
Main>map(hof[(+1),(+2)])[1..10]
[3,4,6,7,9,10,12,13,15,16]
主要>地图(hof[(2^)、(2^)、(2^)、(2^)、(2^)、(2^)])[5..12]
[42,85,170,341,682,1364,2728,5456]
Main>map(hof[(*2),(+100),(^3),否定,(mod 100)])[24..40]
[2768,3151,3567,4020,4509,5038,5609,6221,6876,7575,8322,9117,9960,10855,11805,
12806,13863]
Main>map(hof[(mod 100),否定,(+100),(^3),(*2)])[24..40]
[1181,1351,1562,1767,1989,2230,2490,2771,3071,3395,3774,4145,4539,4958,5402,5873,6369]

Main>map(hof[('mod'i)| i假设您有一个函数列表:

fs = [f1, f2, f3, f4, f5] -- or more
现在,对于从0到无穷大的每个值,
i
,我们想要将函数从
fs
应用到相应的
n-i
,然后将该值除以2i,我们想要求和得到的楼层

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

你在实现这一点时遇到了什么问题?我还没有找到开始实现这一点的方法,如果它是一个多项式,而不是contians f(n)函数显示的数学公式,我可以做到。你会写一个计算多项式的函数吗?那么,你做了什么尝试?多项式(h:t)=\x->h+x*((poly t)x)你也可以
zip3(iterate(2*)1)…
,我相信这样可以省去每次从头开始
2^I
。效果很好!对我来说似乎很神奇。是的,我理解无限列表的实现部分,就是这段代码(fi,I)不确定为什么可以使用
fold
,但不能使用
zip
。我相信在某个地方有一个语言扩展,可以让您用类似
[…]的东西替换
zip
hof fs = \n -> sum [fi (n-i) `div` k | (fi, i, k) <- zip3 fs [0..] (iterate (*2) 1)]