From 0f12822c9d49849c26424743b3744d26056be4cc Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Wed, 18 Jun 2003 17:12:29 +0000 Subject: [PATCH] r5156: *** empty log message *** --- kmrcl.asd | 3 +-- lists.lisp | 46 +++++++++++++++++++++++++++++++++++++++++++++- package.lisp | 33 +++++++++++++++++---------------- 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/kmrcl.asd b/kmrcl.asd index 8fafc8a..40ab811 100644 --- a/kmrcl.asd +++ b/kmrcl.asd @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: kmrcl.asd,v 1.33 2003/06/18 01:00:52 kevin Exp $ +;;;; $Id: kmrcl.asd,v 1.34 2003/06/18 17:12:29 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -45,7 +45,6 @@ (:file "symbols" :depends-on ("macros")) (:file "datetime" :depends-on ("macros")) (:file "math" :depends-on ("macros")) - (:file "assoc" :depends-on ("macros")) #+kmr-mop (:file "mop" :depends-on ("macros")) #+kmr-mop (:file "attrib-class" :depends-on ("seqs" "mop")) (:file "equal" :depends-on ("macros" #+kmr-mop "mop")) diff --git a/lists.lisp b/lists.lisp index a1fd55c..ed2148e 100644 --- a/lists.lisp +++ b/lists.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: lists.lisp,v 1.5 2003/06/06 21:59:29 kevin Exp $ +;;;; $Id: lists.lisp,v 1.6 2003/06/18 17:12:29 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -126,3 +126,47 @@ (let ((results (car list))) (dolist (elem (cdr list) results) (setq results (append results elem))))) + + +;; alists and plists + +(defun alist-elem-p (elem) + (and (consp elem) (atom (car elem)) (atom (cdr elem)))) + +(defun alistp (alist) + (when (listp alist) + (dolist (elem alist) + (unless (alist-elem-p elem) + (return-from alistp nil))) + t)) + +(defmacro update-alist (akey value alist &key (test '#'eql) (key '#'identity)) + "Macro to support below (setf get-alist)" + (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)))))) + +(defun get-alist (key alist &key (test #'eql)) + (cdr (assoc key alist :test test))) + +(defun (setf get-alist) (value key alist &key (test #'eql)) + (update-alist key value alist :test test) + value) + +(defun alist-plist (alist) + (apply #'append (mapcar #'(lambda (x) (list (car x) (cdr x))) alist))) + +(defun plist-alist (plist) + (do ((alist '()) + (pl plist (cddr plist))) + ((null pl) alist) + (setq alist (acons (car pl) (cadr pl) alist)))) + +(defun get-plist (key plist &key (test 'eql) (missing nil)) + (let-if (pos (member key plist :test test)) + (cadr pos) + missing)) diff --git a/package.lisp b/package.lisp index d352998..50fafd7 100644 --- a/package.lisp +++ b/package.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: package.lisp,v 1.42 2003/06/18 01:00:52 kevin Exp $ +;;;; $Id: package.lisp,v 1.43 2003/06/18 17:12:29 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -78,8 +78,17 @@ #:remove-keyword #:remove-keywords #:append-sublists + #:alist-elem-p + #:alistp + #:get-alist + #:update-alist + #:alist-plist + #:plist-alist + #:get-plist + ;; seq.lisp #:nsubseq + ;; math.lisp #:ensure-integer @@ -177,21 +186,13 @@ #:write-xml-cdata ;; From console - *console-msgs* - cmsg - cmsg-c - cmsg-add - cmsg-remove - fixme - - ;; assoc - #:alist-elem-p - #:alistp - #:get-alist - #:update-alist - #:alist-plist - #:plist-alist - #:get-plist + #:*console-msgs* + #:cmsg + #:cmsg-c + #:cmsg-add + #:cmsg-remove + #:fixme + )) -- 2.34.1