【发布时间】:2019-04-02 20:13:37
【问题描述】:
不使用导入代码(我可以使用head,tail,init,last,filter,map,fold,.,一般是基本的haskell函数)
我想创建一个高阶函数 int ,输入 hof :: [Integer->Integer]->(Integer->Integer) ,使用 hof s = \n ->.... (使用 lambda)
实现以下数学公式
需要一些基本的启动指南,我考虑过每次 hof 函数都实现一个递归调用,该 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]
感谢阅读!
【问题讨论】:
-
你在实现这个时遇到了什么问题?
-
我还没有找到开始实现这个的方法,如果它是一个多项式而不是包含 f(n) 函数的数学公式,我可以做到
-
如何编写一个计算多项式的函数?
-
那么,你做了什么尝试?
-
多项式 (h:t) = \x -> h + x * ((poly t) x)