(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* '(:keith nil :marianne 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*)) (defun f (x) (setf (getf x :keith) t) (print x))