Вот хочу замутить такой макр:
(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* переписываю, единица
только для инициализации.