Это (cons 0 c)
, а не (cons (0 c))
. :-) Даже в этом случае cons
- неправильный подход. : -)
Вот как бы это перевести:
(define (mult a b)
(if (zero? b) 0
(let ((c (mult a (quotient b 2))))
(if (even? b)
(* 2 c)
(+ a (* 2 c))))))
Менее буквальный перевод может сделать код немного более читабельным:
(define (mult a b)
(if (zero? b) 0
(let ((c (mult a (quotient b 2))))
(if (even? b)
(+ c c)
(+ a c c)))))
ETA: двоичное издание! (Где, скажем, 4 представляется как '(0 0 1)
.)
(define (mult a b)
(if (null? b) '()
(let ((c (mult a (cdr b))))
(if (zero? (car b))
(cons 0 c)
(add a (cons 0 c))))))
(где вы должны реализовать add
для добавления двоичных цифр.)