# Pastebin iqaiUEMA (define-setf-expander [] (table key &optional (default 'nil defaultp) &environment env) (multiple-value-bind (temps inits new set get) (get-setf-expansion table env) (when (cdr new) (error "~A cannot store multiple values in one place" '[])) (let ((nv (gensym)) (elem-temp (gensym "ELEM")) (alist-temp (gensym "ALIST")) (pair-temp (gensym "PAIR")) (default-temp (gensym "DEFAULT"))) (values (append temps (list elem-temp alist-temp) (when defaultp (list default-temp)) (list pair-temp)) (append inits (list key get) (when defaultp (list default)) (list `(assoc ,elem-temp ,alist-temp :test #'equal))) (list nv) `(cond ((null ,pair-temp) ,(if defaultp `(let ,new ;; progn to make the temp "used" and avoid the style warning. (setf ,(first new) (acons ,elem-temp (progn ,default-temp ,nv) ,alist-temp)) ,set ,nv) `(error "Could not find key ~a in dict ~a" ,elem-temp ,alist-temp))) (t (setf (cdr ,pair-temp) ,nv))) `(cond ((null ,pair-temp) ,(if defaultp default `(error "Could not find key ~a in dict ~a" ,elem-temp ,alist-temp))) (t (cdr ,pair-temp)))))))