mnl used an LLM-bot to generate some test code, for what seemed to be an association list. I wanted to use macros to generate code to compare functionally in lisp. I guess we could extend assoc to match mnl's bot code's: v, ok := k.Get( name: "foo" ) Common Lisp method like that (using NAMEs instead of :test 'string=) : (defmethod %k-get ((obj cons) name) (let ((name.id (assoc name obj))) (values name.id (when name.id t)))) But my macro approach: 1. Inject the anaphora IT into a COND 2. Generate multiple return clauses based on- 3. Capture and unhygeinic mutation of the IT anaphora Looking like: ( since I wanted text output, I added #[ macroexpand ] ) (defmethod k-get ((obj cons) name) `(let ((obj ',obj) (name ',name)) ,#{ `(its-all-cond-you ,#{ `(it-null/not-conds ,#{ `(a-captive (assoc name obj))})})})) which generates the EVALuable text (inlining OBJ* and NAME*)*: *Which is good ; discussion of closures another day (LET ((OBJ OBJ*) (NAME NAME*)) (LET ((IT)) (COND ((NULL (LOCALLY (DECLARE (LOCAL IT)) (SETF IT (ASSOC NAME OBJ)))) (VALUES IT NIL)) ((IDENTITY (LOCALLY (DECLARE( LOCAL IT)) (SETF IT (ASSOC NAME OBJ)))) (VALUES IT T)) (T (ERROR "Unhandled condition"))))) (eval (k-get '(FOO . 1) 'FOO)) -> (FOO . 1) T The files I posted a moment ago have the code.