(defclass food () ((name :initarg :name) (calories :initarg :calories) (portion-size :initarg :portion-size))) (defvar *data* (list (make-instance 'food :name "banana" :calories 100 :portion-size 200) (make-instance 'food :name "apple" :calories 150 :portion-size 100))) (defvar *x* (first *data*)) (defmacro with-dataframe (sym &body body) (let ((names (mapcar #'sb-mop:slot-definition-name (sb-mop:class-direct-slots (class-of *x*))))) `(symbol-macrolet (,@(mapcar (lambda (n) `(,n (slot-value ,sym ',n))) names)) ,@body)))