Допустим определена у меня структура (defstruct foo x y z),
точнее похожих структур может быть несколько.
Разные характерные значения
(x y z) я бы хотел хранить отдельно, например в файле
(скажем, это начальные условия для системы уравнений).
Вроде бы, наиболее логично хранить как assoc list:
((x . 10) (y . 20) (z 0.01)).
Возникает вопрос: как проинициализировать
структуру этими значениями.
Недолго подумав, пришел к макросу:
(defun symb (&rest args)
(values (intern (apply #'mkstr args))))
(defmacro alist->struct (name alist)
(with-gensyms (res)
`(let ((,res (,(symb 'make '- `,name))))
,@(loop for var in alist collect
`(setf (,(symb `,name '- `,(car var)) ,res)
,(cdr var)))
,res)))
что-то мне говорит, что можно было проще все сделать.
Может, кто что посоветует?