(defparameter *params* nil) (defparameter *ltk* (make-hash-table)) (defun in->instance (in) (cond ((eql (first in) 'slider) (if (= 4 (length in)) (setf (gethash in *ltk*) `(,(second in) (make-instance 'scale ,:from ,(third in) ,:to ,(fourth in)))) (setf (gethash in *ltk*) `(,(second in) (make-instance 'scale ,:from ,(third in) ,:to ,(fourth in) ,:resolution ,(fifth in)))))))) (defmacro model (name inputs actor) (setf *params* nil) (setf *ltk* (make-hash-table)) (dolist (i inputs) (in->instance i)) (let (params plisting) (dolist (p inputs) (setf *params* (append *params* (list (second p))))) (progn `(defun ,name ,*params* ,actor))))