diff options
| author | Suzane Sant Ana <tetestonaldo@gmail.com> | 2017-12-31 14:27:06 -0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-12-31 14:27:06 -0200 | 
| commit | 42f9329bb3a028d374d6397991ac48b44064741e (patch) | |
| tree | 1e75e2b3e122aeb863e3ffa037f6f64c4027fbf8 /clojure.html.markdown | |
| parent | e6b77595f2669d66ac7be43c6e6083cbff80a9a7 (diff) | |
| parent | 70a36c9bd970b928adde06afb2bd69f6ba8e5d5c (diff) | |
Merge pull request #1 from adambard/master
update
Diffstat (limited to 'clojure.html.markdown')
| -rw-r--r-- | clojure.html.markdown | 40 | 
1 files changed, 39 insertions, 1 deletions
| diff --git a/clojure.html.markdown b/clojure.html.markdown index 7917ab08..7830f228 100644 --- a/clojure.html.markdown +++ b/clojure.html.markdown @@ -22,7 +22,7 @@ and often automatically.  ; Clojure is written in "forms", which are just  ; lists of things inside parentheses, separated by whitespace.  ; -; The clojure reader  assumes that the first thing is a +; The clojure reader assumes that the first thing is a  ; function or macro to call, and the rest are arguments.  ; The first call in a file should be ns, to set the namespace @@ -264,6 +264,44 @@ keymap ; => {:a 1, :b 2, :c 3}    (print "Saying hello to " name)    (str "Hello " name)) ; => "Hello Urkel" (prints "Saying hello to Urkel") + +; Use the threading macros (-> and ->>) to express transformations of +; data more clearly. + +; The "Thread-first" macro (->) inserts into each form the result of +; the previous, as the first argument (second item) +(->   +   {:a 1 :b 2}  +   (assoc :c 3) ;=> (assoc {:a 1 :b 2} :c 3) +   (dissoc :b)) ;=> (dissoc (assoc {:a 1 :b 2} :c 3) :b) + +; This expression could be written as: +; (dissoc (assoc {:a 1 :b 2} :c 3) :b) +; and evaluates to {:a 1 :c 3} + +; The double arrow does the same thing, but inserts the result of +; each line at the *end* of the form. This is useful for collection +; operations in particular: +(->> +   (range 10) +   (map inc)     ;=> (map inc (range 10) +   (filter odd?) ;=> (filter odd? (map inc (range 10)) +   (into []))    ;=> (into [] (filter odd? (map inc (range 10))) +                 ; Result: [1 3 5 7 9] + +; When you are in a situation where you want more freedom as where to +; put the result of previous data transformations in an  +; expression, you can use the as-> macro. With it, you can assign a +; specific name to transformations' output and use it as a +; placeholder in your chained expressions: + +(as-> [1 2 3] input +  (map inc input);=> You can use last transform's output at the last position +  (nth input 2) ;=>  and at the second position, in the same expression +  (conj [4 5 6] input [8 9 10])) ;=> or in the middle ! + + +  ; Modules  ;;;;;;;;;;;;;;; | 
