X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/2e8f5edb2ba72d47294b1eef5e3156cb2fb05396..72d9260f8258b525339c7241da0631ceaf9f3842:/tools/utils.lisp 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 @@ (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)))