From 6bc4028b30353907f20c7ae61b6d5f966a9436e9 Mon Sep 17 00:00:00 2001 From: espen Date: Thu, 12 Jul 2007 09:02:53 +0000 Subject: [PATCH] Added new function PLIST-REMOVE --- tools/utils.lisp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/utils.lisp b/tools/utils.lisp index 174ca37..7351096 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 @@ (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))) -- 2.11.0