调试接受字符串输入的Scheme函数:实现两单词长度比较功能
Scheme字符串长度判断函数修复方案
现有代码错误原因
- if语法不符合规范:Scheme中
if的标准结构为(if <条件> <真值分支> <假值分支>),每个分支仅允许填写单个表达式。
你未给display "same length"加括号时,if会把display标识符作为真值分支返回值,后续的"same length"、(string-length x)、(string-length y)都会被判定为if结构外的独立表达式,函数最终仅返回最后一个表达式的结果,长度判断逻辑完全失效。
你给display "same length"加括号后,if的真值分支为(display "same length"),假值分支仅识别到(string-length x),剩余的(string-length y)属于if外的表达式,因此函数输出不符合预期。 - 逻辑不完整:假值分支没有长度比较、长短字符串输出的逻辑,仅返回了两个长度值。
修复后完整代码
(define (compare-string-length x y) ;; 提前计算两个字符串长度,避免重复调用 (let ((len-x (string-length x)) (len-y (string-length y))) (if (= len-x len-y) (display "same length") (if (> len-x len-y) ;; 多表达式用begin包裹为单个分支块 (begin (display "较长字符串:") (display x) (display ",长度:") (display len-x) (display ";较短字符串:") (display y) (display ",长度:") (display len-y)) (begin (display "较长字符串:") (display y) (display ",长度:") (display len-y) (display ";较短字符串:") (display x) (display ",长度:") (display len-x))))))
测试示例
- 输入
(compare-string-length "apple" "grape"),输出:same length - 输入
(compare-string-length "scheme" "cpp"),输出:较长字符串:scheme,长度:6;较短字符串:cpp,长度:3
内容的提问来源于stack exchange,提问作者Toaster1
相关产品推荐
相关产品推荐

