Scheme 尝试调用函数时方案正在解除绑定
下面是scheme中的计算器名称。当我调用Scheme 尝试调用函数时方案正在解除绑定,scheme,Scheme,下面是scheme中的计算器名称。当我调用fouroperatorcalculator或calculator (define (twoOperatorCalculator lst) (if (null? lst) 0 (if (eqv? '+ (car lst)) (twoOperatorCalculator (cdr lst)) (if (eqv? '- (car lst))
fouroperatorcalculator
或calculator
(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))
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'(5/2*2))
时,我得到
*** ERROR: unbound variable: fourOperatorCalculator
While loading "./jdoodle.sc" at line 41
和计算器一样,我试图改变偏执论和一切,但都没有成功。请帮我解决问题。在发布的代码中,定义了
fouroperatorcalculator
,但没有定义fouroperatorcalculator
。自R6RS以来,该方案一直区分大小写。一般来说,命名不一致(上面的twoOperatorCalculator
和fouroperatorcalculator
和。使用烤肉串案例:双运算符计算器
和四运算符计算器
。这更容易阅读,因此在调用新过程时更容易正确。同样的问题再次出现在调用过程TwoOperator calculator
的计算器的定义中。但是two运算符计算器尚未定义<已定义代码>两个运算符计算器
。这些只是打字错误。通常方案程序员通过只使用lisp大小写和所有小写标识符来避免这种情况。你应该试试看,你就不会有这种愚蠢的虫子了:-)