You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试接受字符串输入的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:15:04