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

如何设计给列表中每个数字减2的函数?代码测试错误求修正

问题分析与修正方案

嘿,一眼就看出问题所在啦——你的减法参数顺序搞反了!

问题根源

你写的calculator函数里,执行操作时用的是(op num (first lst)),当op是减法-的时候,这相当于计算num - 列表元素(也就是2 - 每个数字),但你实际需求是每个数字减去2(也就是列表元素 - 2),这就导致所有测试结果的符号都和预期相反了。

另外,你的代码里重复定义了一次calculator函数,虽然Scheme会覆盖旧定义,但最好删掉重复的部分,保持代码整洁。

修正后的代码

(define (calculator op num lst)
  (cond [(empty? lst) empty]
        [else (cons (op (first lst) num)  ; 这里调换了num和(first lst)的顺序
                    (calculator op num (rest lst)))]))

(define (sb lst)
  (calculator - 2 lst))

测试验证

现在再跑你的测试用例,结果就完全符合预期了:

  • (sb (list 2 3)) → (list 0 1)
  • (sb (list 5 6)) → (list 3 4)
  • (sb (list -1 -2)) → (list -3 -4)

本质上就是减法操作不满足交换律,所以参数顺序一定要对应你的需求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:23:05