emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 92df7cd923 1/2: Add 'seq-keep'


From: Lars Ingebrigtsen
Subject: master 92df7cd923 1/2: Add 'seq-keep'
Date: Tue, 4 Oct 2022 15:46:27 -0400 (EDT)

branch: master
commit 92df7cd923d0e870f08484cec06c2726be30882b
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Add 'seq-keep'
    
    * doc/lispref/sequences.texi (Sequence Functions): Document it.
    * lisp/emacs-lisp/seq.el (seq-keep): New function (bug#58278).
---
 doc/lispref/sequences.texi        | 13 +++++++++++++
 etc/NEWS                          |  5 +++++
 lisp/emacs-lisp/seq.el            |  4 ++++
 test/lisp/emacs-lisp/seq-tests.el |  6 ++++++
 4 files changed, 28 insertions(+)

diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 12c15e6f9a..bc5a4cf24a 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -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
diff --git a/etc/NEWS b/etc/NEWS
index eb5d3afbd8..06e91f5d71 100644
--- 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
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 31dcfa98b4..82ade0ac0c 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -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
diff --git a/test/lisp/emacs-lisp/seq-tests.el 
b/test/lisp/emacs-lisp/seq-tests.el
index d95b35c45e..e22f86f044 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]