“Aplicación: no es un procedimiento” en procedimientos aritméticos binarios.

Tengo una definición de raqueta simple para multiplicar números binarios juntos. Utiliza una definición "addWithCarry" bien probada que toma tres parámetros: dos listas y un dígito de acarreo y devuelve la suma binaria. Los números binarios se representan como listas en orden inverso.

Pasé por la línea de prueba con el depurador, y pasa por la recursión correctamente. Realiza los multBins cada vez que reduce la lista y según corresponda, luego realiza las funciones addWithCarry como se espera. A medida que sube la copia de seguridad de la pila, repentinamente lanza una excepción "aplicación: no es un procedimiento, se esperaba un procedimiento que se puede aplicar a los argumentos" con el parámetro '(0 0 0 1 0 1 1) que es el valor de la más alta Se agrega "x" al total. Sé que este error puede ocurrir cuando intenta aplicar el resultado de una función como una función con un parámetro, pero no veo esto aquí. Al observar al depurador, todo parece funcionar perfectamente hasta el final. ¿Algunas ideas?

(define (multBins x y)
  (cond
    ((null? y)       '() )
    ((= (first y) 0) ((multBins (cons 0 x) (rest y))))
    (#t              ((addWithCarry x (multBins (cons 0 x) (rest y)) 0)))))  
(test (multBins '(1 0 1 1)'(1 1 0 1))'(1 1 1 1 0 0 0 1))

Aquí está la definición de addWithCarry:

(define (addWithCarry x y carry)
  (cond
    ((and (null? x)(null? y)) (if (= carry 0) '() '(1)))
    ((null? x) (addWithCarry '(0) y carry))
    ((null? y) (addWithCarry x '(0) carry))
    ( #t  (let ((bit1 (first x))
            (bit2 (first y)))
               (cond
                 ((= (+ bit1 bit2 carry) 0) (cons 0 (addWithCarry (rest x) (rest y) 0)))
                 ((= (+ bit1 bit2 carry) 1) (cons 1 (addWithCarry (rest x) (rest y) 0)))
                 ((= (+ bit1 bit2 carry) 2) (cons 0 (addWithCarry (rest x) (rest y) 1)))
                 (   #t                     (cons 1 (addWithCarry (rest x) (rest y) 1))))))))

Respuestas a la pregunta(1)

Su respuesta a la pregunta