43 lines
1.1 KiB
Clojure
43 lines
1.1 KiB
Clojure
(chapter "High-order Functions")
|
|
|
|
(section "Ordinary functions")
|
|
(example "Identity function"
|
|
(identity [1 2 3]))
|
|
(example "Constant function"
|
|
((constantly 10) 20 30))
|
|
|
|
(section "High-order functions")
|
|
(example "Function composition"
|
|
((comp square square square) 2)
|
|
((comp #(* % 2) #(+ % 2)) 10))
|
|
(example "Currying"
|
|
(def sum (partial foldLeft' 0 +))
|
|
(sum [1 2 3]))
|
|
(example "Reduce"
|
|
(def sum' (partial reduce + 0))
|
|
(sum' [1 2 3]))
|
|
(example "Application"
|
|
(apply + [1 2 3]))
|
|
(example "Map"
|
|
(mapv inc (range 10)))
|
|
(example "Juxtaposition"
|
|
((juxt + - * /) 1 2 3 4))
|
|
|
|
(section "Variable-argument functions")
|
|
(example "Sum of squares"
|
|
(defn sumSquares [& xs] (apply + (map square xs)))
|
|
(sumSquares 3 4))
|
|
(example "Sum of squares (anonymous)"
|
|
(#(apply + (map square %&)) 3 4))
|
|
|
|
(example "Explicit multi-arity"
|
|
(defn countArgs
|
|
([] "zero")
|
|
([a] "one")
|
|
([a b] "two")
|
|
([a b & as] (str (+ 2 (count as)))))
|
|
(countArgs)
|
|
(countArgs 1)
|
|
(countArgs 1 2)
|
|
(countArgs 1 2 3))
|