You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:04