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

Scheme实现字符串括号平衡校验的代码运行异常,求修改方案

Scheme括号平衡校验代码调整方案

现有代码存在的问题

  • cond分支语法错误:cond每个分支的标准结构为(判断条件 执行语句),原代码错误将返回值#t/#f写在了and条件的参数列表中,导致分支返回逻辑异常。
  • 类型匹配错误:string->list将字符串转为字符列表,括号对应类型为字符(#\(、#\)),原代码用字符串"("/")"做相等判断,永远无法匹配到括号字符,计数逻辑完全不生效。
  • 默认分支缺失else关键字:原代码最后一个处理非括号字符的分支没有加else标识,未匹配到前面条件的场景执行逻辑混乱。
  • 缺失负数提前终止逻辑:如果遍历过程中计数出现负数(右括号数量多于左括号),后续无论补充多少左括号都无法恢复平衡,原代码没有提前终止判断,会将)(这类明显不平衡的场景误判为平衡。

修正后完整代码

(define (balanced? st)
  (define lst (string->list st))
  (if (zero? (string-length st))
      #t
      (counter lst 0)))

(define (counter lst count)
  (cond
    ((< count 0) #f)
    ((and (zero? count) (null? lst)) #t)
    ((null? lst) #f)
    ((equal? (first lst) #\() (counter (cdr lst) (+ count 1)))
    ((equal? (first lst) #\)) (counter (cdr lst) (- count 1)))
    (else (counter (cdr lst) count))))

效果验证

  • 输入(balanced? "()") 返回#t
  • 输入(balanced? "(a(b)c)") 返回#t
  • 输入(balanced? ")(") 返回#f
  • 输入(balanced? "(()))(") 返回#f

内容的提问来源于stack exchange,提问作者bsaget

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:57:02