如何在Scheme/Racket中实现自定义参数的乘法表生成函数
现有代码的问题
- 函数名大小写不匹配:Scheme语言区分大小写,你定义的函数名为小写开头的
multiplying-table,但递归调用时写的是大写开头的Multiplying-table,会被识别为未定义的函数触发报错。 - 递归调用参数缺失:你定义的函数需要传入
n和value两个参数,递归调用时仅传入了(- n 1),缺少第二个参数value,参数数量不匹配会触发报错。 - 未构建返回列表:else分支中
(* n value)的计算结果没有被存入返回值,且Scheme代码块默认返回最后一个表达式的结果,你当前else分支仅返回递归调用的结果,最终只会返回空列表。 - 序列顺序错误:如果直接把当前
n对应的乘积加入列表,最终得到的序列是从大到小排列,不符合需求的从小到大顺序。
修复后的实现代码
(define (multiplying-table n value) ;; 内部迭代函数从1开始计数生成正序序列 (define (iter current) (if (> current n) '() (cons (* current value) (iter (+ current 1))))) (iter 1))
效果验证
调用(multiplying-table 10 3),会直接返回要求的列表(3 6 9 12 15 18 21 24 27 30),完全符合需求。
内容的提问来源于stack exchange,提问作者Carlos David
相关产品推荐
相关产品推荐

