
(defvar *p* nil)

;;;Case #1: plist local var

(defun pl (pl val prop)
  (let ((result (push val (getf pl prop))))
    (format t "~&RESULT= ~S.  PLIST= ~S" result pl)))

(progn (setq *p* nil)
       (pl *p* 1 :marianne)
       (pl *p* 1 :keith)
       (pl *p* 2 :marianne)
       (pl *p* 3 :marianne)
       (pl *p* 2 :keith)
       (pl *p* 3 :keith)
       (format t "~&Finally: PLIST= ~S" *p*))

;;;Case #2: plist external var

(defun px (val prop)
  (let ((result (push val (getf *p* prop)))
	(*print-circle* t))
    (format t "~&RESULT= ~S. PLIST= ~S" result *p*)))

(let ((*print-circle* t))
  (px  1 :marianne)
  (px  1 :keith)
  (px  2 :marianne)
  (px  3 :marianne)
  (px  2 :keith)
  (px  3 :keith)
  (format t "~&Finally: PLIST= ~S" *p*))

