emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 9726856 1/4: Add seq-do-indexed


From: Nicolas Petton
Subject: [Emacs-diffs] master 9726856 1/4: Add seq-do-indexed
Date: Sat, 18 Jun 2016 08:10:06 +0000 (UTC)

branch: master
commit 9726856f297522b1773e8aadaec34dd1a8e68a14
Author: Nicolas Petton <address@hidden>
Commit: Nicolas Petton <address@hidden>

    Add seq-do-indexed
    
    * lisp/emacs-lisp/seq.el (seq-do-indexed): New function.
    * test/lisp/emacs-lisp/seq-tests.el: Add a unit test for seq-do-indexed.
---
 lisp/emacs-lisp/seq.el            |   12 +++++++++++-
 test/lisp/emacs-lisp/seq-tests.el |   15 +++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 166e886..20610a7 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: sequences
-;; Version: 2.16
+;; Version: 2.17
 ;; Package: seq
 
 ;; Maintainer: address@hidden
@@ -117,6 +117,16 @@ Return SEQUENCE."
 
 (defalias 'seq-each #'seq-do)
 
+(defun seq-do-indexed (function sequence)
+  "Apply FUNCTION to each element of SEQUENCE and return nil.
+Unlike `seq-map', FUNCTION takes two arguments: the element of
+the sequence, and its index within the sequence."
+  (let ((index 0))
+    (seq-do (lambda (elt)
+               (funcall function elt index)
+               (setq index (1+ index)))
+             sequence)))
+
 (cl-defgeneric seqp (sequence)
   "Return non-nil if SEQUENCE is a sequence, nil otherwise."
   (sequencep sequence))
diff --git a/test/lisp/emacs-lisp/seq-tests.el 
b/test/lisp/emacs-lisp/seq-tests.el
index 50543de..b227de3 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -107,6 +107,21 @@ Evaluate BODY for each created sequence.
                                   '(a b c d))
                  '((a 0) (b 1) (c 2) (d 3)))))
 
+(ert-deftest test-seq-do-indexed ()
+  (let ((result nil))
+    (seq-do-indexed (lambda (elt i)
+                      (add-to-list 'result (list elt i)))
+                    nil)
+    (should (equal result nil)))
+  (with-test-sequences (seq '(4 5 6))
+    (let ((result nil))
+      (seq-do-indexed (lambda (elt i)
+                        (add-to-list 'result (list elt i)))
+                      seq)
+      (should (equal (seq-elt result 0) '(6 2)))
+      (should (equal (seq-elt result 1) '(5 1)))
+      (should (equal (seq-elt result 2) '(4 0))))))
+
 (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)))



reply via email to

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