如何设计给列表中每个数字减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
相关产品推荐
相关产品推荐

