From: espen Date: Thu, 12 Jul 2007 09:02:53 +0000 (+0000) Subject: Added new function PLIST-REMOVE X-Git-Url: https://git.distorted.org.uk/~mdw/clg/commitdiff_plain/6bc4028b30353907f20c7ae61b6d5f966a9436e9?ds=sidebyside Added new function PLIST-REMOVE --- 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)))