(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