(defmacro lolmacro (&rest lists)
    (let ((llist '())
          (maps '()))
        (dolist (list lists)
            (let ((argname (gensym)))
                (setf llist (cons argname llist))
                (setf maps (cons `(map 'list (lambda (x) (* x ,argname)) ,list) maps))))
       `(lambda ,(reverse llist) (reverse (list ,@maps)))))
 
(defvar *loltwo* (lolmacro '(1 2 3) '(4 5 6)))
(defvar *lolthree* (lolmacro '(1 2 3) '(4 5 6) '(7 8 9)))
 
(print (apply *loltwo* '(2 1)))
(print (apply *lolthree* '(3 2 1)))