chiark / gitweb /
mop: Handy function for making modified copies of instances.
[lisp] / mdw-base.lisp
index 0b68b8d69be12b4476f62c82ceb43c6e6217ef51..59ea6923c65b086de015750cc134e51e6ab4101b 100644 (file)
@@ -30,7 +30,7 @@ (defpackage #:mdw.base
   (:use #:common-lisp)
   (:export #:compile-time-defun
           #:show
-          #:stringify #:listify #:fix-pair #:pairify #:parse-body
+          #:stringify #:mappend #:listify #:fix-pair #:pairify #:parse-body
           #:whitespace-char-p
           #:slot-uninitialized
           #:nlet #:while #:case2 #:ecase2
@@ -69,6 +69,12 @@ (defun stringify (str)
     (t (with-output-to-string (s)
         (princ str s)))))
 
+(defun mappend (function list &rest more-lists)
+  "Apply FUNCTION to corresponding elements of LIST and MORE-LISTS, yielding
+   a list.  Return the concatenation of all the resulting lists.  Like
+   mapcan, but nondestructive."
+  (apply #'append (apply #'mapcar function list more-lists)))
+
 (compile-time-defun listify (x)
   "If X is a (possibly empty) list, return X; otherwise return (list X)."
   (if (listp x) x (list x)))