diff options
author | Damien Cassou <damien@cassou.me> | 2022-09-04 13:21:59 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2022-09-04 13:21:59 +0200 |
commit | 4751b51d5e1182975aa002af08a625e4859ec276 (patch) | |
tree | 1dcabd8ede4a44d931d998dca9ddba21d2faa324 /lisp/emacs-lisp/seq.el | |
parent | 4d50d413e67dd8ae183af8b68f315a667ebf2add (diff) | |
download | emacs-4751b51d5e1182975aa002af08a625e4859ec276.tar.gz emacs-4751b51d5e1182975aa002af08a625e4859ec276.tar.bz2 emacs-4751b51d5e1182975aa002af08a625e4859ec276.zip |
Add new function `seq-positions'
* doc/lispref/sequences.texi (Sequence Functions): Document it.
* lisp/emacs-lisp/seq.el (seq-positions): New function.
* lisp/emacs-lisp/shortdoc.el (sequence): Mention it.
* test/lisp/emacs-lisp/seq-tests.el (test-seq-positions): Test it
(bug#57548).
Diffstat (limited to 'lisp/emacs-lisp/seq.el')
-rw-r--r-- | lisp/emacs-lisp/seq.el | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el index 64197b55e5f..31dcfa98b40 100644 --- a/lisp/emacs-lisp/seq.el +++ b/lisp/emacs-lisp/seq.el @@ -460,6 +460,23 @@ Equality is defined by the function TESTFN, which defaults to `equal'." nil))) ;;;###autoload +(cl-defgeneric seq-positions (sequence elt &optional testfn) + "Return indices for which (TESTFN (seq-elt SEQUENCE index) ELT) is non-nil. + +TESTFN is a two-argument function which is passed each element of +SEQUENCE as first argument and ELT as second. TESTFN defaults to +`equal'. + +The result is a list of (zero-based) indices." + (let ((result '())) + (seq-do-indexed + (lambda (e index) + (when (funcall (or testfn #'equal) e elt) + (push index result))) + sequence) + (nreverse result))) + +;;;###autoload (cl-defgeneric seq-uniq (sequence &optional testfn) "Return a list of the elements of SEQUENCE with duplicates removed. TESTFN is used to compare elements, or `equal' if TESTFN is nil." |