Найти произведение элементов списка - Lisp

Формулировка задачи:

Необходимо найти произведение элементов в списке, имеющем вид: ((х (х)) (х (х)) (х (х)) ...) На данный момент имеется такой код, которые не выводит нужное значение:
(display "Редукция: ")
(define n 1)
(define  (sp1 x f)
  (if (null? x)
      n
      (and (f (car (car x))) (f (car (car (cdr (car x))))) (sp1 (cdr x) f))
      )
  )
(sp1 '((1 (2)) (3 (4)) (5 (6))) (lambda (x) (* x n)))
Подскажите, пожалуйста, как исправить

Код к задаче: «Найти произведение элементов списка - Lisp»

textual
(defun product-deep (w) (reduce #'*(flatten w)))
 
(defun flatten (w)
  (loop for a in w 
        if (and a (atom a)) collect a
        else nconc (flatten a)))
 
> (product-deep '((1 (2)) (3 (4)) (5 (6))))
720

6   голосов, оценка 4.167 из 5


СОХРАНИТЬ ССЫЛКУ