Clojure es un lenguaje funcional. Las funciones son ciudadanos de primera clase y pueden pasarse por parámetros o devolverse desde otras funciones. La mayoría del código de Clojure consta principalmente de funciones puras (sin efectos secundarios), lo que quiere decir que si invocamos una función con las mismas entradas o parámetros, produce la misma salida.
defn define una función nombrada:
;; name params body
;; ----- ------ -------------------
(defn greet [name] (str "Hello, " name) )
Esta función tiene un solo parámetro, sin embargo, se puede incluir cualquier número de parámetros en el vector params.
Luego podemos llamar la función de esta manera :
user=> (greet "mundo")
"Hello, mundo"