(define (producto Lista)
  (cond ((null? (cdr Lista)) (map (lambda (x) (list x)) (car Lista)))
        (else (reduce append '()
                      (map (lambda (y) (map (lambda (x) (cons y x))
                                            (producto (cdr Lista))))
                           (car Lista))))))



(write ( producto '((1 2 3) (4 5)) )  )
(write ( producto '(('a 's 'd)  (1 2 3)  ('X 'Y 'Z)) )  )
