chiark / gitweb /
Lots of tidying up.
[lisp] / collect.lisp
index c275bc57218f3734a15c9124303df5baf3bb6a8b..be689cbc77652eb0024faec73d95e887a33bf2c9 100644 (file)
@@ -1,7 +1,5 @@
 ;;; -*-lisp-*-
 ;;;
-;;; $Id$
-;;;
 ;;; Collecting things into lists
 ;;;
 ;;; (c) 2005 Straylight/Edgeware
 ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 (defpackage #:collect
-  (:use #:common-lisp #:mdw.base)
-  (:export #:make-collector #:collected
-          #:collecting #:with-collection
-          #:collect #:collect-tail
-          #:collect-append #:collect-nconc))
+  (:use #:common-lisp #:mdw.base))
 (in-package collect)
 
 (eval-when (:compile-toplevel :load-toplevel)
   (defvar *collecting-anon-list-name* (gensym)
     "The default name for anonymous `collecting' lists."))
 
+(export 'make-collector)
 (defun make-collector (&optional list)
   "Return a new collector object whose initial contents is LIST.  Note that
    LIST will be destroyed if anything else is collected."
   (let ((head (cons nil list)))
     (setf (car head) (if list (last list) head))))
 
+(export 'collected)
 (defmacro collected (&optional (name *collecting-anon-list-name*))
   "Return the current list collected into the collector NAME (or
    *collecting-anon-list-name* by default)."
   `(the list (cdr ,name)))
 
+(export 'collecting)
 (defmacro collecting (vars &body body)
   "Collect items into lists.  The VARS are a list of collection variables --
    their values are unspecified, except that they may be passed to `collect'
-   and `collect-tail' If VARS is empty then *collecting-anon-list-name* is
+   and `collect-tail' If VARS is empty then *collecting-anon-list-name* is
    used.  VARS may be an atom instead of a singleton list.  The form produces
    multiple values, one for each list constructed."
   (cond ((null vars) (setf vars (list *collecting-anon-list-name*)))
@@ -58,14 +55,16 @@ (defmacro collecting (vars &body body)
      ,@body
      (values ,@(mapcar (lambda (v) `(collected ,v)) vars))))
 
+(export 'with-collection)
 (defmacro with-collection (vars collection &body body)
   "Collect items into lists VARS according to the form COLLECTION; then
    evaluate BODY with VARS bound to those lists."
   `(multiple-value-bind
-   ,(listify vars)
+       ,(listify vars)
        (collecting ,vars ,collection)
      ,@body))
 
+(export 'collect)
 (defmacro collect (x &optional (name *collecting-anon-list-name*))
   "Add item X to the `collecting' list NAME (or *collecting-anon-list-name*
    by default)."
@@ -74,6 +73,7 @@ (defmacro collect (x &optional (name *collecting-anon-list-name*))
        (setf (cdar ,name) ,new)
        (setf (car ,name) ,new))))
 
+(export 'collect-tail)
 (defmacro collect-tail (x &optional (name *collecting-anon-list-name*))
   "Make item X be the tail of `collecting' list NAME (or
    *collecting-anon-list-name* by default).  It is an error to continue
@@ -82,6 +82,7 @@ (defmacro collect-tail (x &optional (name *collecting-anon-list-name*))
      (setf (cdar ,name) ,x)
      (setf (car ,name) nil)))
 
+(export 'collect-append)
 (defmacro collect-append (list &optional (name *collecting-anon-list-name*))
   "Append LIST to the tail of `collecting' list NAME.  This obviously
    involves copying LIST."
@@ -89,6 +90,7 @@ (defmacro collect-append (list &optional (name *collecting-anon-list-name*))
     `(dolist (,item ,list)
        (collect ,item ,name))))
 
+(export 'collect-nconc)
 (defmacro collect-nconc (list &optional (name *collecting-anon-list-name*))
   "Attach LIST to the tail of `collecting' list NAME.  This will involve
    destroying LIST if anything else gets collected afterwards."