;;;; 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
;;;;
(: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"))
;;;; 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
;;;;
(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))
;;;; 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
;;;;
#: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
#: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
+
))