]> git.eshelyaron.com Git - emacs.git/commitdiff
Add 'seq-keep'
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 4 Oct 2022 19:44:52 +0000 (21:44 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 4 Oct 2022 19:44:52 +0000 (21:44 +0200)
* doc/lispref/sequences.texi (Sequence Functions): Document it.
* lisp/emacs-lisp/seq.el (seq-keep): New function (bug#58278).

doc/lispref/sequences.texi
etc/NEWS
lisp/emacs-lisp/seq.el
test/lisp/emacs-lisp/seq-tests.el

index 12c15e6f9a28302bcee4bafae2113b8879eda115..bc5a4cf24a675205a57da53f057cd77377341dcf 100644 (file)
@@ -698,6 +698,19 @@ the same type as @var{sequence}.
 @end example
 @end defun
 
+@defun seq-keep function sequence
+  This function returns a list of all non-@code{nil} results from
+calling @var{function} on the elements in @var{sequence}.
+
+@example
+@group
+(seq-keep #'cl-digit-char-p '(?6 ?a ?7))
+@result{} (6 7)
+@end group
+@end example
+
+@end defun
+
 @defun seq-reduce function sequence initial-value
 @cindex reducing sequences
   This function returns the result of calling @var{function} with
index eb5d3afbd80813ec887b3018d62d7d5aa4140077..06e91f5d7168141b9a137940ba9a17e552c3f0d2 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3150,6 +3150,11 @@ These can be used for buttons in buffers and the like.  See the
 This returns a list of the (zero-based) indices of elements matching a
 given predicate in the specified sequence.
 
++++
+** New function 'seq-keep'.
+This is like 'seq-map', but removes all non-nil results from the
+returned list.
+
 +++
 ** New arguments MESSAGE and TIMEOUT of 'set-transient-map'.
 MESSAGE specifies a message to display after activating the transient
index 31dcfa98b4040be9d0b0e6048ccc9fb8319328da..82ade0ac0c35cacf4e693a833551e5cc169f8687 100644 (file)
@@ -695,5 +695,9 @@ which may be shorter."
             result))
     (nreverse result)))
 
+(defun seq-keep (function sequence)
+  "Apply FUNCTION to SEQUENCE and return all non-nil results."
+  (delq nil (seq-map function sequence)))
+
 (provide 'seq)
 ;;; seq.el ends here
index d95b35c45eb97975207046e1dd7e26e6138a4e2b..e22f86f0447d5bed6e96e805a2d8c6315a6499e8 100644 (file)
@@ -592,5 +592,11 @@ Evaluate BODY for each created sequence.
     (should (= (length list) 10000))
     (should (= (length (seq-uniq (append list list))) 10000))))
 
+(ert-deftest test-seq-keep ()
+  (should (equal (seq-keep #'cl-digit-char-p '(?6 ?a ?7))
+                 '(6 7)))
+  (should (equal (seq-keep #'cl-digit-char-p [?6 ?a ?7])
+                 '(6 7))))
+
 (provide 'seq-tests)
 ;;; seq-tests.el ends here