(define (map proc . lists)
  (if (null? lists)
      (apply proc)
      (if (null? (car lists))
          '()
          (let* ((unz (apply unzip1-with-cdr lists))
                 (cars (car unz))
                 (cdrs (cdr unz)))
            (cons (apply proc cars) (apply map (cons proc cdrs)))))))