Clojure Programming/Examples/API Examples/Function Tools
fn
edit(map (fn [a] (str "hi " a)) ["mum" "dad" "sister"])
; => ("hi mum" "hi dad" "hi sister")
#()
editSee the reader page, (Macro characters -> Dispatch -> Anonymous function literal) for an explanation of the '%' and other characters used to refer to function arguments.
user=> (def sq #(* % %))
#'user/sq
user=> (sq 3)
9
user=> (map #(class %) [1 "asd"])
(java.lang.Integer java.lang.String)
user=>
"lambda"
editUse fn, or even better there is a custom syntax to create an anonymous function:
(map #(str "hi " %) ["mum" "dad" "sister"])
%
editRepresents an optional argument to an unnamed function:
#(+ 2 %)
#(+ 2 %1 %2)
Arguments in the body are determined by the presence of argument literals taking the form %, %n or %&. % is a synonym for %1, %n designates the nth arg (1-based), and %& designates a rest arg.
complement
editUsage: (complement f)
Takes a fn f and returns a fn that takes the same arguments as f, has the same effects, if any, and returns the opposite truth value.
user=> (defn single-digit[x] (< x 10))
#'user/single-digit
user=> (single-digit 9)
true
user=> (single-digit 10)
false
user=> (def multi-digit (complement single-digit))
#'user/multi-digit
user=> (multi-digit 9)
false
user=> (multi-digit 10)
true