[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 30fe90f 1/2: New function seq-map-indexed
From: |
Nicolas Petton |
Subject: |
[Emacs-diffs] master 30fe90f 1/2: New function seq-map-indexed |
Date: |
Sun, 14 Feb 2016 09:35:18 +0000 |
branch: master
commit 30fe90fa3c8f814a30a5136089b995b0a26f5cd0
Author: Nicolas Petton <address@hidden>
Commit: Nicolas Petton <address@hidden>
New function seq-map-indexed
* lisp/emacs-lisp/seq.el (seq-map-indexed): New function.
* test/lisp/emacs-lisp/seq-tests.el: Add tests for seq-map-indexed.
---
lisp/emacs-lisp/seq.el | 12 ++++++++++++
test/lisp/emacs-lisp/seq-tests.el | 10 ++++++++++
2 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 300fe5c..8b7b594 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -144,6 +144,18 @@ if positive or too small if negative)."
sequence)
(nreverse result)))
+(defun seq-map-indexed (function sequence)
+ "Return the result of applying FUNCTION to each element of SEQUENCE.
+Unlike `seq-map', FUNCTION takes two arguments: the element of
+the sequence, and its index within the sequence."
+ (let ((index 0))
+ (seq-map (lambda (elt)
+ (prog1
+ (funcall function elt index)
+ (setq index (1+ index))))
+ sequence)))
+
+
;; faster implementation for sequences (sequencep)
(cl-defmethod seq-map (function (sequence sequence))
(mapcar function sequence))
diff --git a/test/lisp/emacs-lisp/seq-tests.el
b/test/lisp/emacs-lisp/seq-tests.el
index a8ca48b..c9219b5 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -97,6 +97,16 @@ Evaluate BODY for each created sequence.
(with-test-sequences (seq '())
(should (seq-empty-p (seq-take-while #'test-sequences-oddp seq)))))
+(ert-deftest test-seq-map-indexed ()
+ (should (equal (seq-map-indexed (lambda (elt i)
+ (list elt i))
+ nil)
+ nil))
+ (should (equal (seq-map-indexed (lambda (elt i)
+ (list elt i))
+ '(a b c d))
+ '((a 0) (b 1) (c 2) (d 3)))))
+
(ert-deftest test-seq-filter ()
(with-test-sequences (seq '(6 7 8 9 10))
(should (equal (seq-filter #'test-sequences-evenp seq) '(6 8 10)))