Вот хочу замутить такой макр: (defmacro my_macro (list-table) (setf *sw-tb-cr* (eval (first (eval list-table))) *sw-tb-nx* (rest (eval list-table))) (setf (gethash (caddr *sw-tb-cr*) (eval (car *sw-tb-cr*))) (cadddr *sw-tb-cr*)) (cond ((null *sw-tb-nx*) nil) (t (create-state-table *sw-tb-nx*)))) Здесь, (defvar *sw-tb-nx* (list 1)) ; начальная (defvar *sw-tb-cr* (list 1)) ; инициализация (defvar *ABC* (list '*A* '*B*)) ; A и B - тоже списки Никак не получается разобраться с переменными. Подскажите, как правильно реализовать этот макр ??? Можно ли обойтись без глобальных переменных ? (пока не получается). Ну и как вообще делается такое ? В том примере, что я привел, при компиляции выдается ошибка: ;Compile-time error: ; (in macroexpansion of (CREATE-STATE-TABLE *SW-TB-NX*)) ; (hint: For more precise location, try *BREAK-ON-SIGNALS*.) ; The value 1 is not of type LIST. Не понятно при чём тут единица ? Я же *sw-tb-nx* переписываю, единица только для инициализации.