Merge pull request #221 from zck/it-anywhere-in-->

Make --> bind IT for use anywhere in FORMS, and add -as->.
master
Matus Goljer 9 years ago committed by GitHub
commit 1e14307e2d
  1. 34
      dash.el
  2. 28
      dev/examples.el

@ -1354,17 +1354,29 @@ last item in second form, etc."
(list form x)))
(:else `(->> (->> ,x ,form) ,@more))))
(defmacro --> (x form &rest more)
"Thread the expr through the forms. Insert X at the position
signified by the token `it' in the first form. If there are more
forms, insert the first form at the position signified by `it' in
in second form, etc."
(declare (debug (form &rest [&or symbolp (sexp &rest [&or "it" form])])))
(if (null more)
(if (listp form)
(--map-when (eq it 'it) x form)
(list form x))
`(--> (--> ,x ,form) ,@more)))
(defmacro --> (x &rest forms)
"Starting with the value of X, thread each expression through FORMS.
Insert X at the position signified by the token `it' in the first
form. If there are more forms, insert the first form at the position
signified by `it' in in second form, etc."
(declare (debug (form body)))
`(-as-> ,x it ,@forms))
(defmacro -as-> (value variable &rest forms)
"Starting with VALUE, thread VARIABLE through FORMS.
In the first form, bind VARIABLE to VALUE. In the second form, bind
VARIABLE to the result of the first form, and so forth."
(declare (debug (form symbolp body)))
(if (null forms)
`,value
`(let ((,variable ,value))
(-as-> ,(if (symbolp (car forms))
(list (car forms) variable)
(car forms))
,variable
,@(cdr forms)))))
(defmacro -some-> (x &optional form &rest more)
"When expr is non-nil, thread it through the first form (via `->'),

@ -801,7 +801,33 @@ new list."
(defexamples -->
(--> "def" (concat "abc" it "ghi")) => "abcdefghi"
(--> "def" (concat "abc" it "ghi") (upcase it)) => "ABCDEFGHI"
(--> "def" (concat "abc" it "ghi") upcase) => "ABCDEFGHI")
(--> "def" (concat "abc" it "ghi") upcase) => "ABCDEFGHI"
(--> "def" upcase) => "DEF"
(--> 3 (car (list it))) => 3
(--> '(1 2 3 4) (--map (1+ it) it)) => '(2 3 4 5)
(--map (--> it (1+ it)) '(1 2 3 4)) => '(2 3 4 5)
(--filter (--> it (equal 0 (mod it 2))) '(1 2 3 4)) => '(2 4)
(--> '(1 2 3 4) (--filter (equal 0 (mod it 2)) it)) => '(2 4)
(--annotate (--> it (< 1 it)) '(0 1 2 3)) => '((nil . 0)
(nil . 1)
(t . 2)
(t . 3))
(--> '(0 1 2 3) (--annotate (< 1 it) it)) => '((nil . 0)
(nil . 1)
(t . 2)
(t . 3)))
(defexamples -as->
(-as-> 3 my-var (1+ my-var) (list my-var) (mapcar (lambda (ele) (* 2 ele)) my-var)) => '(8)
(-as-> 3 my-var 1+) => 4
(-as-> 3 my-var) => 3
(-as-> "def" string (concat "abc" string "ghi")) => "abcdefghi"
(-as-> "def" string (concat "abc" string "ghi") upcase) => "ABCDEFGHI"
(-as-> "def" string (concat "abc" string "ghi") (upcase string)) => "ABCDEFGHI")
(defexamples -some->
(-some-> '(2 3 5)) => '(2 3 5)

Loading…
Cancel
Save