;;;; list stuff (defun as-list (x) (if (listp x) x (list x))) (defun geta (key list &optional (default nil)) (or (cdr (assoc key list)) default)) (defun puta (key list new) (if (cdr (assoc key list)) (setf (cdr (assoc key list)) new) (push (cons key new) list)) list) (defun inca (key list &optional (inc 1)) (let ((old (cdr (assoc key list)))) (if old (setf (cdr (assoc key list)) (+ old inc)) (push (cons key inc) list)) list)) (egs :assoc (eg '(geta 'fred '((fred . 1) (jane . 2)))) (eg '(geta 'fred '((frodo . 1) (jane . 2)) 23)) (eg '(puta 'fred '((fred . 1) (jane . 2)) 'flintstone)) (eg '(puta 'fred '((frodo . 1) (jane . 2)) 'flintstone)) (eg '(inca 'fred '((fred . 1) (jane . 2)) )) (eg '(inca 'fred '((frodo . 1) (jane . 2)) )))