clojure/core -> 和 ->>的区别

文档

;->
;->>
; (x f1 f2 f3 )
;都是从左往右执行 f1 -> f2 -> f3 ->...-> fn
;不同的是参数位置
;假设原参数为y
;-> f(x & y) :    
(->x (f1 y1) (f2 y2) (f3 y3))  (f3 (f2 (f1 x y1) y2) y3)

(-> 2 (+ 1) (* 2) (- 10))
(1+2)*2-10=-4

(->> 2 (+ 1) (* 2) (- 10))
(10-2*(2+1))=4

;->> f(y x)  
(->>x (f1 y1) (f2 y2) (f3 y3))   (f3 y3 (f2 y2 (f1 y1 x)))

(defn f [& a] (apply println a))
;->
weather.core=> (-> 10 (f 1 2 3) (f 4 5 6) (f 7 8 9))
10 1 2 3
nil 4 5 6
nil 7 8 9
nil

;->>
weather.core=> (->> 10 (f 1 2 3) (f 4 5 6) (f 7 8 9))
1 2 3 10
4 5 6 nil
7 8 9 nil


(defn f [& a] (apply println a) (apply + a))

weather.core=>  (-> 100 (f 1 2 3) (f 4 5 6) (f 7 8 9 ))
100 1 2 3
106 4 5 6
121 7 8 9
145
weather.core=>  (->> 100 (f 1 2 3) (f 4 5 6) (f 7 8 9 ))
1 2 3 100
4 5 6 106
7 8 9 121
145


你可能感兴趣的:(clojure,clojure)