Files
paradigms/clojure/examples/1_5_functions-2.clj
2026-04-13 20:12:01 +03:00

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))