Haskell中如何实现对列表第n项应用n次指定函数的高阶函数
递归实现高阶函数g的方案
我们需要实现的高阶函数g,接收函数f和整数列表作为入参,对列表第k个元素(k从1开始计数)应用k次f,最终返回处理后的新列表。
完整递归实现代码
g :: (Int -> Int) -> [Int] -> [Int] g f xs = go 1 xs where -- 内部递归辅助函数:参数1为当前需要应用的函数次数,参数2为待处理的剩余列表 go _ [] = [] go n (current:remain) = applyN n f current : go (n + 1) remain -- 递归实现:将函数f重复应用n次到入参x上 applyN 0 _ x = x applyN n f x = applyN (n - 1) f (f x)
实现说明
- 通过内部定义的
go函数维护当前元素的应用次数,初始从1开始计数,每处理完一个元素,次数自增1后递归处理剩余列表 applyN同样采用递归实现,递归边界为应用次数为0时直接返回原始值,每递归一层就执行一次函数调用,直到次数耗尽
效果验证
使用测试用例执行:
g (+1) [1,2,3,4,5]
输出结果为[2,4,6,8,10],完全符合预期。
内容的提问来源于stack exchange,提问作者jamie
相关产品推荐
相关产品推荐

