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

在Beginner Racket中实现类似Python collections.counter()的递归函数

递归实现符号列表频次统计函数(Scheme/Racket 环境)

原代码问题说明

现有代码的核心问题有两个:

  • 全局变量val的逻辑完全错误,每次递归只会统一加1,无法针对不同符号单独统计计数
  • 没有重复符号合并逻辑,每遍历到一个元素就直接生成新的键值对,不会更新已有同符号的计数,最终会生成大量重复符号的独立条目

实现思路

要求必须使用递归实现,我们采用两层递归逻辑完成需求:

  1. 主函数递归遍历输入的符号列表,每拿到一个符号,就调用辅助函数更新当前的统计结果
  2. 辅助函数递归遍历已有的统计结果列表,找到对应符号就将计数加1,没找到就新增对应符号的统计条目

最终可运行代码

; 辅助函数:向统计列表中新增/更新指定符号的计数
(define (update-count count-list sym)
  (cond
    ; 统计列表为空,直接新增符号条目,计数为1
    [(empty? count-list) (list (list sym 1))]
    [else
     (let ([current-entry (first count-list)])
       (if (equal? (first current-entry) sym)
           ; 匹配到对应符号,计数加1后返回
           (cons (list sym (add1 (second current-entry))) (rest count-list))
           ; 未匹配到,继续遍历后续统计条目
           (cons current-entry (update-count (rest count-list) sym))))]))

; 主统计函数
(define (counter los)
  (cond
    [(empty? los) empty]
    [else
     ; 先统计剩余列表的频次,再将当前符号更新到统计结果中
     (update-count (counter (rest los)) (first los))]))

运行验证

输入命令:(counter (list 't 't 'c 'a))
输出结果:(list (list 't 2) (list 'c 1) (list 'a 1)),完全符合需求要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:09