(defmacro watch-vars (vars form) ;; indicates any mutations of variables specified in vars which arose ;; as a result of evaluating form... ;; E.g., (watch-vars (foo bar) (setq foo 3 bar 4)) ;; ==> foo: NIL --> 3 ;; bar: NIL --> 4 ;; 4 ;; ...assuming of course that the two variables were unbound before ;; calling watchvars... `(let* ((prev-value-list (list ,@(mapcar #'(lambda (f) `',(symeval f)) (if (listp vars) vars (list vars))))) (return-me (si:eval-special-ok ,form))) (print 'got-here) (loop for var in ',vars and old-val in prev-value-list do (format t "~%~A: ~S --> ~S" var old-val (symeval var))) return-me))