Add !split-with

master
Magnar Sveen 14 years ago
parent 82a12a251f
commit 6238f8fbbd
  1. 11
      README.md
  2. 9
      bang.el
  3. 5
      examples.el

@ -22,6 +22,7 @@ Or you can just dump `bang.el` in your load path somewhere.
* [!mapcat](#mapcat-fn-list) `(fn list)` * [!mapcat](#mapcat-fn-list) `(fn list)`
* [!take-while](#take-while-fn-list) `(fn list)` * [!take-while](#take-while-fn-list) `(fn list)`
* [!drop-while](#drop-while-fn-list) `(fn list)` * [!drop-while](#drop-while-fn-list) `(fn list)`
* [!split-with](#split-with-fn-list) `(fn list)`
* [!interpose](#interpose-sep-list) `(sep list)` * [!interpose](#interpose-sep-list) `(sep list)`
* [!replace-where](#replace-where-pred-rep-list) `(pred rep list)` * [!replace-where](#replace-where-pred-rep-list) `(pred rep list)`
* [!first](#first-fn-list) `(fn list)` * [!first](#first-fn-list) `(fn list)`
@ -184,6 +185,16 @@ Returns the tail of `list` starting from the first item for which (`fn` item) re
(!!drop-while (< it 4) '(1 2 3 4 3 2 1)) ;; => '(4 3 2 1) (!!drop-while (< it 4) '(1 2 3 4 3 2 1)) ;; => '(4 3 2 1)
``` ```
### !split-with `(fn list)`
Returns a list of ((!take-while `fn` `list`) (!drop-while `fn` `list`))
```cl
(!split-with 'even? '(1 2 3 4)) ;; => '(nil (1 2 3 4))
(!split-with 'even? '(2 4 5 6)) ;; => '((2 4) (5 6))
(!!split-with (< it 4) '(1 2 3 4 3 2 1)) ;; => '((1 2 3) (4 3 2 1))
```
### !interpose `(sep list)` ### !interpose `(sep list)`
Returns a new list of all elements in `list` separated by `sep`. Returns a new list of all elements in `list` separated by `sep`.

@ -171,6 +171,15 @@ Thus function FN should return a collection."
"Returns the tail of LIST starting from the first item for which (FN item) returns nil." "Returns the tail of LIST starting from the first item for which (FN item) returns nil."
(!!drop-while (funcall fn it) list)) (!!drop-while (funcall fn it) list))
(defmacro !!split-with (form list)
"Anaphoric form of `!split-with'."
`(list (!!take-while ,form ,list)
(!!drop-while ,form ,list)))
(defun !split-with (fn list)
"Returns a list of ((!take-while FN LIST) (!drop-while FN LIST))"
(!!split-with (funcall fn it) list))
(defun !interpose (sep list) (defun !interpose (sep list)
"Returns a new list of all elements in LIST separated by SEP." "Returns a new list of all elements in LIST separated by SEP."
(let (result) (let (result)

@ -68,6 +68,11 @@
(!drop-while 'even? '(2 4 5 6)) => '(5 6) (!drop-while 'even? '(2 4 5 6)) => '(5 6)
(!!drop-while (< it 4) '(1 2 3 4 3 2 1)) => '(4 3 2 1)) (!!drop-while (< it 4) '(1 2 3 4 3 2 1)) => '(4 3 2 1))
(defexamples !split-with
(!split-with 'even? '(1 2 3 4)) => '(() (1 2 3 4))
(!split-with 'even? '(2 4 5 6)) => '((2 4) (5 6))
(!!split-with (< it 4) '(1 2 3 4 3 2 1)) => '((1 2 3) (4 3 2 1)))
(defexamples !interpose (defexamples !interpose
(!interpose "-" '()) => '() (!interpose "-" '()) => '()
(!interpose "-" '("a")) => '("a") (!interpose "-" '("a")) => '("a")

Loading…
Cancel
Save