mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
Improve the semantic of seq-some
Update seq-some to return non-nil if the predicate returns non-nil for any element of the seq, in which case the returned value is the one returned by the predicate. * lisp/emacs-lisp/seq.el (seq-some): Update the function and its docstring. * test/automated/seq-tests.el (test-seq-some): Add a regression test. * doc/lispref/sequences.texi (Sequence Functions): Update the documentation for seq-some.
This commit is contained in:
parent
c36663d866
commit
aeb1d6bdd5
@ -558,18 +558,23 @@ calling @var{function}.
|
||||
@end defun
|
||||
|
||||
@defun seq-some predicate sequence
|
||||
This function returns the first member of sequence for which @var{predicate}
|
||||
returns non-@code{nil}.
|
||||
This function returns non-@code{nil} if @var{predicate} returns
|
||||
non-@code{nil} for any element of @var{sequence}. If so, the returned
|
||||
value is the value returned by @var{predicate}.
|
||||
|
||||
@example
|
||||
@group
|
||||
(seq-some #'numberp ["abc" 1 nil])
|
||||
@result{} 1
|
||||
@result{} t
|
||||
@end group
|
||||
@group
|
||||
(seq-some #'numberp ["abc" "def"])
|
||||
@result{} nil
|
||||
@end group
|
||||
@group
|
||||
(seq-some #'null ["abc" 1 nil])
|
||||
@result{} t
|
||||
@end group
|
||||
@end example
|
||||
@end defun
|
||||
|
||||
|
@ -261,11 +261,13 @@ If SEQ is empty, return INITIAL-VALUE and FUNCTION is not called."
|
||||
t))
|
||||
|
||||
(cl-defgeneric seq-some (pred seq)
|
||||
"Return any element for which (PRED element) is non-nil in SEQ, nil otherwise."
|
||||
"Return non-nil if (PRED element) is non-nil for any element in SEQ, nil otherwise.
|
||||
If so, return the non-nil value returned by PRED."
|
||||
(catch 'seq--break
|
||||
(seq-doseq (elt seq)
|
||||
(when (funcall pred elt)
|
||||
(throw 'seq--break elt)))
|
||||
(let ((result (funcall pred elt)))
|
||||
(when result
|
||||
(throw 'seq--break result))))
|
||||
nil))
|
||||
|
||||
(cl-defgeneric seq-count (pred seq)
|
||||
@ -280,8 +282,8 @@ If SEQ is empty, return INITIAL-VALUE and FUNCTION is not called."
|
||||
"Return the first element in SEQ that equals to ELT.
|
||||
Equality is defined by TESTFN if non-nil or by `equal' if nil."
|
||||
(seq-some (lambda (e)
|
||||
(funcall (or testfn #'equal) elt e))
|
||||
seq))
|
||||
(funcall (or testfn #'equal) elt e))
|
||||
seq))
|
||||
|
||||
(cl-defgeneric seq-uniq (seq &optional testfn)
|
||||
"Return a list of the elements of SEQ with duplicates removed.
|
||||
|
@ -131,11 +131,12 @@ Evaluate BODY for each created sequence.
|
||||
|
||||
(ert-deftest test-seq-some ()
|
||||
(with-test-sequences (seq '(4 3 2 1))
|
||||
(should (= (seq-some #'test-sequences-evenp seq) 4))
|
||||
(should (= (seq-some #'test-sequences-oddp seq) 3))
|
||||
(should (seq-some #'test-sequences-evenp seq))
|
||||
(should (seq-some #'test-sequences-oddp seq))
|
||||
(should-not (seq-some (lambda (elt) (> elt 10)) seq)))
|
||||
(with-test-sequences (seq '())
|
||||
(should-not (seq-some #'test-sequences-oddp seq))))
|
||||
(should-not (seq-some #'test-sequences-oddp seq)))
|
||||
(should (seq-some #'null '(1 nil 2))))
|
||||
|
||||
(ert-deftest test-seq-contains ()
|
||||
(with-test-sequences (seq '(3 4 5 6))
|
||||
|
Loading…
Reference in New Issue
Block a user