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

为什么我编写的Scheme统计列表元素的numofatoms函数没有输出?

问题原因分析
  • 核心问题是括号不匹配:你最后一行函数调用的代码缺少2个闭合右括号,Scheme解释器会一直等待你输入完整的表达式,因此不会产生任何输出,看起来就是程序卡住无响应。
    原错误调用代码:
    (numofatoms '((1 3) 7 (4(5 2))); calling the function
    修正后正确的调用代码:
    (numofatoms '((1 3) 7 (4 (5 2))))
  • 次要问题是函数名一致性:你需求举例的调用函数名为numOfSymbols,但实际定义的函数名为numofatoms,Scheme区分大小写,如果按照示例的函数名调用会报未定义错误,保持调用和定义的函数名一致即可。
修正后的完整可运行代码
; 统计嵌套列表中原子的总数量
(define (numofatoms lst)
  ; 定义辅助展平函数
  (define (flatten x)
    (cond ((null? x) '())
          ((pair? x) (append (flatten (car x)) (flatten (cdr x))))
          (else (list x))))
  (length (flatten lst)))

; 调用测试,返回6
(numofatoms '((1 3) 7 (4 (5 2))))
可选优化方案

你不需要额外定义展平函数,可以直接递归统计,减少不必要的内存开销,代码示例如下:

(define (numofatoms lst)
  (cond ((null? lst) 0)
        ((pair? (car lst)) (+ (numofatoms (car lst)) (numofatoms (cdr lst))))
        (else (+ 1 (numofatoms (cdr lst))))))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:15:08