r9652: improve make-url, rename tests
[kmrcl.git] / lists.lisp
index 674a5d76b22d9977aff797b61e0d71d1b55d73bd..3115dd5dbe1b99476baf576be214fe4353615686 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: lists.lisp,v 1.10 2003/08/12 06:37:53 kevin Exp $
+;;;; $Id$
 ;;;;
 ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
     (unless (find elem l1)
       (setq l1 (append l1 (list elem))))))
 
-(defun remove-from-tree-if (pred tree)
+(defun remove-from-tree-if (pred tree &optional atom-processor)
   "Strip from tree of atoms that satistify predicate"
   (if (atom tree)
       (unless (funcall pred tree)
-       tree)
-    (let ((car-strip (remove-from-tree-if pred (car tree)))
-         (cdr-strip (remove-from-tree-if pred (cdr tree))))
+       (if atom-processor
+           (funcall atom-processor tree)
+         tree))
+    (let ((car-strip (remove-from-tree-if pred (car tree) atom-processor))
+         (cdr-strip (remove-from-tree-if pred (cdr tree) atom-processor)))
       (cond
        ((and car-strip (atom (cadr tree)) (null cdr-strip))
        (list car-strip))
           (progn
             (setf (cdr ,elem) ,value)
             ,alist)
-       (setf ,alist (acons ,akey ,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))
+  "This doesn't work to add a field which alist value is only modified locally"
   (update-alist key value alist :test test)
   value)
 
 
 (defun plist-alist (plist)
   (do ((alist '())
-       (pl plist (cddr plist)))
+       (pl plist (cddr pl)))
       ((null pl) alist)
     (setq alist (acons (car pl) (cadr pl) alist))))