emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/dash dac28b0 155/426: Merge pull request #19 from Wilfr


From: Phillip Lord
Subject: [elpa] externals/dash dac28b0 155/426: Merge pull request #19 from Wilfred/master
Date: Tue, 04 Aug 2015 19:37:22 +0000

branch: externals/dash
commit dac28b05af0f6b1a93cb64f3623bd9939cc8e89e
Merge: cc33c2f a4b70f9
Author: Magnar Sveen <address@hidden>
Commit: Magnar Sveen <address@hidden>

    Merge pull request #19 from Wilfred/master
    
    -slice implementation
---
 dash.el         |   22 ++++++++++++++++++++++
 dev/examples.el |    5 +++++
 2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/dash.el b/dash.el
index a924424..5b2b3b3 100644
--- a/dash.el
+++ b/dash.el
@@ -331,6 +331,28 @@ Returns `nil` both if all items match the predicate, and 
if none of the items ma
 (defalias '-only-some-p '-only-some?)
 (defalias '--only-some-p '--only-some?)
 
+(defun -slice (list from &optional to)
+  "Return copy of LIST, starting from index FROM to index TO.
+FROM or TO may be negative."
+  (let ((length (length list))
+        (new-list nil)
+        (index 0))
+    ;; to defaults to the end of the list
+    (setq to (or to length))
+    ;; handle negative indices
+    (when (< from 0)
+      (setq from (mod from length)))
+    (when (< to 0)
+      (setq to (mod to length)))
+
+    ;; iterate through the list, keeping the elements we want
+    (while (< index to)
+      (when (>= index from)
+        (!cons (car list) new-list))
+      (!cdr list)
+      (setq index (1+ index)))
+    (nreverse new-list)))
+
 (defun -take (n list)
   "Returns a new list of the first N items in LIST, or all items if there are 
fewer than N."
   (let (result)
diff --git a/dev/examples.el b/dev/examples.el
index 2fb37d9..40a1ed3 100644
--- a/dev/examples.el
+++ b/dev/examples.el
@@ -122,6 +122,11 @@
   (-repeat 0 :a) => nil
   (-repeat -1 :a) => nil)
 
+(defexamples -slice
+  (-slice '(1 2 3 4 5) 1) => '(2 3 4 5)
+  (-slice '(1 2 3 4 5) 0 3) => '(1 2 3)
+  (-slice '(1 2 3 4 5) 1 -1) => '(2 3 4))
+
 (defexamples -take
   (-take 3 '(1 2 3 4 5)) => '(1 2 3)
   (-take 17 '(1 2 3 4 5)) => '(1 2 3 4 5))



reply via email to

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