From 557a5f1a56ecbf0a90c17c2675cce4f27d7ef4bf Mon Sep 17 00:00:00 2001 From: Owen Rodley Date: Sat, 18 May 2013 15:39:17 +1200 Subject: [PATCH] Rewrite REMOVE using SATISFIES-TEST-P --- src/sequence.lisp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/sequence.lisp b/src/sequence.lisp index d7dae46..6ac3ebf 100644 --- a/src/sequence.lisp +++ b/src/sequence.lisp @@ -55,7 +55,7 @@ :test-not test-not :test-not-p test-not-p ) (return index)))) -(defun remove (x seq) +(defun remove (x seq &key key (test #'eql testp) (test-not #'eql test-not-p)) (cond ((null seq) nil) @@ -63,7 +63,8 @@ (let* ((head (cons nil nil)) (tail head)) (do-sequence (elt seq) - (unless (eql x elt) + (unless (satisfies-test-p x elt :key key :test test :testp testp + :test-not test-not :test-not-p test-not-p) (let ((new (list elt))) (rplacd tail new) (setq tail new)))) @@ -71,7 +72,8 @@ (t (let (vector) (do-sequence (elt seq index) - (if (eql x elt) + (if (satisfies-test-p x elt :key key :test test :testp testp + :test-not test-not :test-not-p test-not-p) ;; Copy the beginning of the vector only when we find an element ;; that does not match. (unless vector -- 1.7.10.4