"Application: not a procedure" in binären Rechenverfahren

Ich habe eine einfache Racket-Definition zum Multiplizieren von Binärzahlen. Es verwendet eine bewährte "addWithCarry" -Definition, die drei Parameter verwendet: zwei Listen und eine Übertragsziffer und gibt die Binärsumme zurück. Die Binärzahlen werden in umgekehrter Reihenfolge als Listen dargestellt.

Ich bin mit dem Debugger durch die Testzeile gegangen, und die Rekursion wird ordnungsgemäß durchlaufen. Es führt die Multibins jedes Mal aus, wenn die y-Liste entsprechend verkleinert wird, und führt dann die addWithCarry-Funktionen wie erwartet aus. Beim Hochfahren des Stapels wird plötzlich die Ausnahme "application: keine Prozedur, erwartet eine Prozedur, die auf Argumente angewendet werden kann" mit dem Parameter '(0 0 0 1 0 1 1), dem höchsten Wert, ausgelöst "x" zur Gesamtsumme hinzugefügt. Ich weiß, dass dieser Fehler auftreten kann, wenn Sie versuchen, das Ergebnis einer Funktion als Funktion mit einem Parameter anzuwenden, aber ich sehe dies hier nicht. Beim Betrachten des Debuggers scheint alles bis zum Ende perfekt zu funktionieren. Irgendwelche Ideen?

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

Hier ist die addWithCarry-Definition:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage