> +(defmacro thunk-delay (&rest body) > + "Delay the evaluation of BODY." > + (declare (debug t)) > + (let ((forced (make-symbol "forced")) > + (val (make-symbol "val"))) > + `(let (,forced ,val) > + (lambda (&optional check) > + (if check > + ,forced > + (unless ,forced > + (setf ,val (progn ,@body)) > + (setf ,forced t))) > + ,val)))) Maybe I'm misreading this on my phone, but it looks like this val should be inside the if.