(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)))
KGRlZm1hY3JvIGxvbG1hY3JvICgmcmVzdCBsaXN0cykKICAgIChsZXQgKChsbGlzdCAnKCkpCiAgICAgICAgICAobWFwcyAnKCkpKQogICAgICAgIChkb2xpc3QgKGxpc3QgbGlzdHMpCiAgICAgICAgICAgIChsZXQgKChhcmduYW1lIChnZW5zeW0pKSkKICAgICAgICAgICAgICAgIChzZXRmIGxsaXN0IChjb25zIGFyZ25hbWUgbGxpc3QpKQogICAgICAgICAgICAgICAgKHNldGYgbWFwcyAoY29ucyBgKG1hcCAnbGlzdCAobGFtYmRhICh4KSAoKiB4ICxhcmduYW1lKSkgLGxpc3QpIG1hcHMpKSkpCiAgICAgICBgKGxhbWJkYSAsKHJldmVyc2UgbGxpc3QpIChyZXZlcnNlIChsaXN0ICxAbWFwcykpKSkpCiAKKGRlZnZhciAqbG9sdHdvKiAobG9sbWFjcm8gJygxIDIgMykgJyg0IDUgNikpKQooZGVmdmFyICpsb2x0aHJlZSogKGxvbG1hY3JvICcoMSAyIDMpICcoNCA1IDYpICcoNyA4IDkpKSkKIAoocHJpbnQgKGFwcGx5ICpsb2x0d28qICcoMiAxKSkpCihwcmludCAoYXBwbHkgKmxvbHRocmVlKiAnKDMgMiAxKSkp