From 60ed056bf2012f90c5c0a505caced73b6e0133bb Mon Sep 17 00:00:00 2001 Message-Id: <60ed056bf2012f90c5c0a505caced73b6e0133bb.1746834449.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 12 Jul 2007 09:02:53 +0000 Subject: [PATCH] Added new function PLIST-REMOVE Organization: Straylight/Edgeware From: espen --- tools/utils.lisp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/utils.lisp b/tools/utils.lisp index 27aab4d..ef1ccf0 100644 --- a/tools/utils.lisp +++ b/tools/utils.lisp @@ -20,13 +20,13 @@ ;; 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))) -- [mdw]