X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/9974239ad4517a85d7cc71fe5bccfc04e138be5b..ce28bf9ebc1d1cdc7f6114d462866af27dc8dcf6:/tools/utils.lisp 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 @@ (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)))