(defmacro oo (&rest l) `(progn ,@(mapcar #'(lambda(x) `(o ,x)) l))) (defmacro setters (&rest l) `(progn ,@(mapcar #'(lambda(x) `(setter ,x)) l))) (defmacro o (x) `(progn (format t "[~a]=[~a]~%" (quote ,x) ,x) ,x)) (defmacro setter (s) (let ((f (intern (string-upcase (format nil "~a!" s))))) `(defun ,f (x y) (setf (,s x) y)))) (defun dopairs (f l) (let ((x (funcall f))) (dopairs-1 x l) x)) (defun dopairs-1 (x l) (unless (null l) (let ((key (pop l)) (value (pop l))) (funcall key x value) (dopairs-1 x l)))) (defstruct attr (num 0) age name) (setters attr-num attr-age attr-name) (defun demo1 () (dopairs 'make-attr '(attr-num! 100 attr-age! 203)) )