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

Racket(Intermediate Student with lambda)无递归实现列表扁平化求助

实现无递归的嵌套列表扁平化函数

核心思路是利用内置的foldr高阶函数替代递归和append的功能:

  • 遍历原列表的每个元素,判断其是原子值还是子列表
  • 若为原子值,直接用cons将其加入累积结果
  • 若为子列表,用foldr cons将该子列表的所有元素合并到累积结果中(这一步等价于append的效果,但完全依赖内置foldr,未手动编写递归)

符合要求的代码:

(define (flatten lol)
  (foldr (lambda (x acc)
           (if (list? x)
               (foldr cons acc x)
               (cons x acc)))
         '()
         lol))

验证示例:

  • 输入 '(1 (2 3) ((4)) 5),输出 '(1 2 3 4 5)

解释:外层foldr负责遍历原列表的顶层元素,内层foldr仅在遇到子列表时触发,用于展开子列表并合并到最终结果中。全程未手动实现递归,也未使用被禁止的append或apply。

内容的提问来源于stack exchange,提问作者glass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:52:48