- (let ((elem (gensym)))
- `(let ((,elem (assoc ,akey ,alist :test ,test :key ,key)))
- (if ,elem
- (progn
- (setf (cdr ,elem) ,value)
- ,alist)
- (setf ,alist (acons ,akey ,value ,alist))))))
+ (let ((elem (gensym "ELEM-"))
+ (val (gensym "VAL-")))
+ `(let ((,elem (assoc ,akey ,alist :test ,test :key ,key))
+ (,val ,value))
+ (cond
+ (,elem
+ (setf (cdr ,elem) ,val))
+ (,alist
+ (setf (cdr (last ,alist)) (list (cons ,akey ,val))))
+ (t
+ (setf ,alist (list (cons ,akey ,val)))))
+ ,alist)))