为什么我的Racket程序运行(fce cm mm 5)时无输出也无报错?
问题根因
- 传参类型不匹配:你执行
(fce cm mm 5)时,传入的cm、mm是未定义的标识符,不是代码逻辑中判断的字符串类型,因此fce函数的cond分支全部匹配失败,Racket中无匹配分支的cond会返回空值,不会报错也不会有输出。 - 换算逻辑存在批量错误:即便你传入正确的字符串参数,所有换算函数的换算系数、输出文本的单位硬编码错误,也会得到错误结果。
修复步骤
- 调用时传入字符串格式的单位:即改为
(fce "cm" "mm" 5) - 修正各个换算函数的系数与输出文本,同时新增
else分支处理不支持的单位提示,修复后的完整代码如下:
#lang racket (define eq equal?) (define (fce jednotka jednotka2 cislo) (cond ((eq jednotka "mm") (mm cislo jednotka2)) ((eq jednotka "cm") (cm cislo jednotka2)) ((eq jednotka "m") (m cislo jednotka2)) ((eq jednotka "km") (km cislo jednotka2)) (else (format "不支持的输入单位:~a" jednotka)))) (define (mm c j) (cond ((eq j "mm") (format "~a mm = ~a ~a" c c j)) ((eq j "cm") (format "~a mm = ~a ~a" c (* c 0.1) j)) ((eq j "m") (format "~a mm = ~a ~a" c (* c 0.001) j)) ((eq j "km") (format "~a mm = ~a ~a" c (* c 0.000001) j)) (else (format "不支持的目标单位:~a" j)))) (define (cm c j) (cond ((eq j "mm") (format "~a cm = ~a ~a" c (* c 10) j)) ((eq j "cm") (format "~a cm = ~a ~a" c c j)) ((eq j "m") (format "~a cm = ~a ~a" c (* c 0.01) j)) ((eq j "km") (format "~a cm = ~a ~a" c (* c 0.00001) j)) (else (format "不支持的目标单位:~a" j)))) (define (m c j) (cond ((eq j "mm") (format "~a m = ~a ~a" c (* c 1000) j)) ((eq j "cm") (format "~a m = ~a ~a" c (* c 100) j)) ((eq j "m") (format "~a m = ~a ~a" c c j)) ((eq j "km") (format "~a m = ~a ~a" c (* c 0.001) j)) (else (format "不支持的目标单位:~a" j)))) (define (km c j) (cond ((eq j "mm") (format "~a km = ~a ~a" c (* c 1000000) j)) ((eq j "cm") (format "~a km = ~a ~a" c (* c 100000) j)) ((eq j "m") (format "~a km = ~a ~a" c (* c 1000) j)) ((eq j "km") (format "~a km = ~a ~a" c c j)) (else (format "不支持的目标单位:~a" j))))
修复后执行(fce "cm" "mm" 5),会返回正确结果"5 cm = 50 mm"。
内容的提问来源于stack exchange,提问作者Aleksandre Khachaturov
相关产品推荐
相关产品推荐

