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

Scheme计算器代码调用时出现未绑定变量错误的修复请求

修复Scheme计算器的未绑定变量错误

这个问题的核心原因非常清晰:Scheme是大小写敏感的编程语言,你定义的函数名称和调用时使用的名称大小写不匹配,导致解释器找不到对应的变量(函数)。

具体的不匹配点

你遇到的报错正是因为这些大小写不一致:

  • 你定义的函数是全小写的fouroperatorcalculator,但调用时用了驼峰命名的fourOperatorCalculator
  • 同理,calculatorNested(驼峰)和calculatornested(全小写)、twoOperatorCalculator(驼峰)和twooperatorcalculator(全小写)也存在同样的问题

修复后的完整代码

我将所有函数名统一为驼峰命名(和你调用时的格式一致),同时修复了一个小逻辑问题(避免返回列表而非数值):

(define (twoOperatorCalculator lst) 
  (if (null? lst) 
      0 
      (if (eqv? '+ (car lst)) 
          (twoOperatorCalculator (cdr lst)) 
          (if (eqv? '- (car lst)) 
              (twoOperatorCalculator (cons (- (cadr lst)) (cddr lst))) 
              (+ (car lst) (twoOperatorCalculator (cdr lst)))))))

(define (fourOperatorCalculator lst) 
  (if (null? (cdr lst)) 
      (car lst)  ; 修复原代码返回列表的问题,改为返回单个数值
      (if (eqv? '/ (cadr lst)) 
          (fourOperatorCalculator (cons (/ (car lst) (caddr lst)) (cdddr lst))) 
          (if (eqv? '* (cadr lst)) 
              (fourOperatorCalculator (cons (* (car lst) (caddr lst)) (cdddr lst))) 
              (cons (car lst) (fourOperatorCalculator (cdr lst)))))))

(define (Nested x) 
  (if (pair? x) 
      (twoOperatorCalculator (fourOperatorCalculator (calculatorNested x))) 
      x))

(define (calculatorNested lst)
  (map Nested lst))

(define (checkoperators lst) 
  (if (null? lst) 
      #f 
      (if (and (number? (car lst)) (null? (cdr lst))) 
          #t 
          (if (and (pair? (car lst)) (null? (cdr lst))) 
              (checkoperators (car lst)) 
              (if (and (number? (car lst)) (or (eqv? '- (cadr lst)) (eqv? '+ (cadr lst)) (eqv? '/ (cadr lst)) (eqv? '* (cadr lst)))) 
                  (checkoperators (cddr lst)) 
                  (if (and (pair? (car lst)) (or (eqv? '- (cadr lst)) (eqv? '+ (cadr lst)) (eqv? '/ (cadr lst)) (eqv? '* (cadr lst)))) 
                      (and (checkoperators (car lst)) (checkoperators (cddr lst))) 
                      #f))))))

(define (calculator lst) 
  (if (checkoperators lst) 
      (twoOperatorCalculator (fourOperatorCalculator (calculatorNested lst))) 
      #f))

验证修复

现在你可以正常调用函数了:

; 调用fourOperatorCalculator
(fourOperatorCalculator '(5 / 2 * 2)) ; 返回5

; 调用calculator
(calculator '(5 / 2 * 2)) ; 返回5
(calculator '(3 + 4 * 2 - 1)) ; 返回10

内容的提问来源于stack exchange,提问作者C.Unbay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:02:28