X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Flist.lisp;h=7cedd8176d6032ecf0a57e037a963085fc4be2cc;hb=1ac7e7c95d8badd4ff01d676dffece6b710cea13;hp=5f38f7126e26bace475fecfc625c22a0490b9c48;hpb=76e5ccc7e653ffe279148bb8f3f6f5b7c4772a4e;p=sbcl.git diff --git a/src/code/list.lisp b/src/code/list.lisp index 5f38f71..7cedd81 100644 --- a/src/code/list.lisp +++ b/src/code/list.lisp @@ -734,8 +734,28 @@ (do ((list list (cdr list))) ((null list) nil) (let ((car (car list))) - (if (satisfies-the-test item car) - (return list)))))) + (when (satisfies-the-test item car) + (return list)))))) + +(macrolet ((def (name funs form) + `(defun ,name (item list ,@funs) + ,@(when funs `((declare (function ,@funs)))) + (do ((list list (cdr list))) + ((null list) nil) + (when ,form + (return list)))))) + (def %member () + (eql item (car list))) + (def %member-key (key) + (eql item (funcall key (car list)))) + (def %member-key-test (key test) + (funcall test item (funcall key (car list)))) + (def %member-key-test-not (key test-not) + (not (funcall test-not item (funcall key (car list))))) + (def %member-test (test) + (funcall test item (car list))) + (def %member-test-not (test-not) + (not (funcall test-not item (car list))))) (defun member-if (test list &key key) #!+sb-doc