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))) (list form x)))
(:else `(->> (->> ,x ,form) ,@more)))) (:else `(->> (->> ,x ,form) ,@more))))
(defmacro --> (x form &rest more) (defmacro --> (x &rest forms)
"Thread the expr through the forms. Insert X at the position "Starting with the value of X, thread each expression through FORMS.
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 Insert X at the position signified by the token `it' in the first
in second form, etc." form. If there are more forms, insert the first form at the position
(declare (debug (form &rest [&or symbolp (sexp &rest [&or "it" form])]))) signified by `it' in in second form, etc."
(if (null more) (declare (debug (form body)))
(if (listp form) `(-as-> ,x it ,@forms))
(--map-when (eq it 'it) x form)
(list form x)) (defmacro -as-> (value variable &rest forms)
`(--> (--> ,x ,form) ,@more))) "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) (defmacro -some-> (x &optional form &rest more)
"When expr is non-nil, thread it through the first form (via `->'), "When expr is non-nil, thread it through the first form (via `->'),

@ -801,7 +801,33 @@ new list."
(defexamples --> (defexamples -->
(--> "def" (concat "abc" it "ghi")) => "abcdefghi" (--> "def" (concat "abc" it "ghi")) => "abcdefghi"
(--> "def" (concat "abc" it "ghi") (upcase it)) => "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-> (defexamples -some->
(-some-> '(2 3 5)) => '(2 3 5) (-some-> '(2 3 5)) => '(2 3 5)

Loading…
Cancel
Save