;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: lists.lisp,v 1.6 2003/06/18 17:12:29 kevin Exp $
+;;;; $Id: lists.lisp,v 1.7 2003/06/20 08:35:22 kevin Exp $
;;;;
;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
((null pl) alist)
(setq alist (acons (car pl) (cadr pl) alist))))
+(defmacro update-plist (pkey value plist &key (test '#'eql))
+ "Macro to support below (setf get-alist)"
+ (let ((pos (gensym)))
+ `(let ((,pos (member ,pkey ,plist :test ,test)))
+ (if ,pos
+ (progn
+ (setf (cadr ,pos) ,value)
+ ,plist)
+ (setf ,plist (append ,plist (list ,pkey ,value)))))))
+
(defun get-plist (key plist &key (test 'eql) (missing nil))
(let-if (pos (member key plist :test test))
(cadr pos)
missing))
+
+(defun (setf get-plist) (value key plist &key (test #'eql))
+ (update-plist key value plist :test test)
+ value)