«Применение: не процедура» в двоичных арифметических процедурах

У меня есть простое определение Racket для умножения двоичных чисел вместе. Используется хорошо провереноaddWithCarry» определение, которое принимает три параметра: два списка и цифру переноса и возвращает двоичную сумму. Двоичные числа представлены в виде списков в обратном порядке.

Я прошел через тестовую строку с отладчиком, и она проходит через рекурсию правильно. Он выполняет множественные биты каждый раз, когда это уместно, сокращая список y, затем выполняет функции addWithCarry, как и ожидалось. Когда он поднимается обратно в стек, он внезапно выдает исключениеприложение: не процедура, ожидаемая процедура, которая может быть применена к аргументам " с параметром '(0 0 0 1 0 1 1), который является значением наибольшего «х» добавлено к общему. Я знаю, что эта ошибка может возникать, когда вы пытаетесь применить результат функции как функцию с параметром, но я нене вижу этого здесь. Смотря отладчик, вроде бы все работает отлично до самого конца. Есть идеи?

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

Вот определение 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))))))))

Ответы на вопрос(1)

Ваш ответ на вопрос