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

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

[elpa] externals/dash b9b6330 079/426: Add !take


From: Phillip Lord
Subject: [elpa] externals/dash b9b6330 079/426: Add !take
Date: Tue, 04 Aug 2015 19:36:50 +0000

branch: externals/dash
commit b9b63302162c47fb711f5845d8f48a1ec2d321d4
Author: Magnar Sveen <address@hidden>
Commit: Magnar Sveen <address@hidden>

    Add !take
---
 README.md   |   10 ++++++++++
 bang.el     |    9 +++++++++
 examples.el |    4 ++++
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/README.md b/README.md
index 335ea17..98f1ea3 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ Or you can just dump `bang.el` in your load path somewhere.
 * [!keep](#keep-fn-list) `(fn list)`
 * [!concat](#concat-rest-lists) `(&rest lists)`
 * [!mapcat](#mapcat-fn-list) `(fn list)`
+* [!take](#take-n-list) `(n list)`
 * [!take-while](#take-while-fn-list) `(fn list)`
 * [!drop-while](#drop-while-fn-list) `(fn list)`
 * [!split-with](#split-with-fn-list) `(fn list)`
@@ -165,6 +166,15 @@ Thus function `fn` should return a collection.
 (!!mapcat (list 0 it) '(1 2 3)) ;; => '(0 1 0 2 0 3)
 ```
 
+### !take `(n list)`
+
+Returns a new list of the first `n` items in `list`, or all items if there are 
fewer than `n`.
+
+```cl
+(!take 3 '(1 2 3 4 5)) ;; => '(1 2 3)
+(!take 17 '(1 2 3 4 5)) ;; => '(1 2 3 4 5)
+```
+
 ### !take-while `(fn list)`
 
 Returns a new list of successive items from `list` while (`fn` item) returns a 
non-nil value.
diff --git a/bang.el b/bang.el
index 2b9e203..4320a74 100644
--- a/bang.el
+++ b/bang.el
@@ -144,6 +144,15 @@ the supplied LISTS."
 Thus function FN should return a collection."
   (!!mapcat (funcall fn it) 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)
+    (while (and list (> n 0))
+      (setq result (cons (car list) result))
+      (setq list (cdr list))
+      (setq n (1- n)))
+    (nreverse result)))
+
 (defmacro !!take-while (form list)
   "Anaphoric form of `!take-while'."
   (let ((l (make-symbol "list"))
diff --git a/examples.el b/examples.el
index 8d4283d..c08d46b 100644
--- a/examples.el
+++ b/examples.el
@@ -58,6 +58,10 @@
   (!mapcat (lambda (item) (list 0 item)) '(1 2 3)) => '(0 1 0 2 0 3)
   (!!mapcat (list 0 it) '(1 2 3)) => '(0 1 0 2 0 3))
 
+(defexamples !take
+  (!take 3 '(1 2 3 4 5)) => '(1 2 3)
+  (!take 17 '(1 2 3 4 5)) => '(1 2 3 4 5))
+
 (defexamples !take-while
   (!take-while 'even? '(1 2 3 4)) => '()
   (!take-while 'even? '(2 4 5 6)) => '(2 4)



reply via email to

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