使用DrRacket编写函数:将两个数字列表转换为分数列表
DrRacket 分数列表生成函数实现
需求说明
编写一个DrRacket函数,接收两个数字列表:分子列表(numerators)和分母列表(denominators),返回对应位置分子除以分母得到的分数列表。规则如下:
- 若其中一个列表长度更短,较短列表的对应位置默认补1
- 无需处理分母为0的情况(函数可因除零报错)
函数实现
(define (fractions nums dens) (cond [(and (empty? nums) (empty? dens)) empty] [(empty? nums) (cons (/ 1 (first dens)) (fractions empty (rest dens)))] [(empty? dens) (cons (/ (first nums) 1) (fractions (rest nums) empty))] [else (cons (/ (first nums) (first dens)) (fractions (rest nums) (rest dens)))]))
代码逻辑说明
- 双空列表分支:当两个输入列表都为空时,直接返回空列表,递归终止
- 分子列表为空分支:分子列表已遍历完,分母列表还有剩余元素,此时分子默认补1,计算
1/当前分母后,继续递归处理剩余的分母列表 - 分母列表为空分支:分母列表已遍历完,分子列表还有剩余元素,此时分母默认补1,计算
当前分子/1后,继续递归处理剩余的分子列表 - 双列表非空分支:取两个列表的首个元素计算分数,将结果加入列表头部,再递归处理两个列表的剩余部分
测试示例
- 标准输入输出:
(fractions (list 1 2 3) (list 1 3 5)) ; 输出:(list 1/1 2/3 3/5) - 分子列表更长的情况:
(fractions (list 4 5 6) (list 2 3)) ; 输出:(list 4/2 5/3 6/1) - 分母列表更长的情况:
(fractions (list 7) (list 2 4 6)) ; 输出:(list 7/2 1/4 1/6)
内容的提问来源于stack exchange,提问作者Nosferatu
相关产品推荐
相关产品推荐

