Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 尝试调用函数时方案正在解除绑定_Scheme - Fatal编程技术网

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))

下面是scheme中的计算器名称。当我调用
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大小写和所有小写标识符来避免这种情况。你应该试试看,你就不会有这种愚蠢的虫子了:-)