Допустим определена у меня структура (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))) что-то мне говорит, что можно было проще все сделать. Может, кто что посоветует?
Форум —
Development
