chiark / gitweb /
Added new function PLIST-REMOVE
authorespen <espen>
Thu, 12 Jul 2007 09:02:53 +0000 (09:02 +0000)
committerespen <espen>
Thu, 12 Jul 2007 09:02:53 +0000 (09:02 +0000)
tools/utils.lisp

index 174ca378f62b2ece64aa0a82b63ca9113e30f104..7351096da633f08180a9e5336120eec167ac41c4 100644 (file)
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: utils.lisp,v 1.2 2006-04-25 20:26:04 espen Exp $
+;; $Id: utils.lisp,v 1.3 2007-07-12 09:02:53 espen Exp $
 
 (defpackage #:clg-utils
   (:use #:common-lisp)
   (:export #:read-lines #:mklist #:namep #:funcallable #:return-if #:when-bind
           #:visible-char-p #:whitespace-p #:split-string-if #:split-string
-          #:concatenate-strings #:string-prefix-p #:get-all 
+          #:concatenate-strings #:string-prefix-p #:get-all #:plist-remove
           #:delete-collect-if))
           
 (in-package #:clg-utils)
@@ -109,6 +109,12 @@ (defun get-all (plist property)
     (when tail
       (cons value (get-all (cddr tail) property)))))
 
+(defun plist-remove (key plist &key (test #'eq))
+  (loop
+   for (%key value) on plist by #'cddr
+   while (and %key value)
+   unless (funcall test key %key)
+   nconc (list %key value)))
 
 (defun delete-collect-if (predicate seq)
   (let ((head (cons nil seq)))