The on-going assumption is that programming is all about data transformation. Let’s see how we achieve this with functions.
Function is a programming construct. Function is a piece of code that requires zero or more values as input, and function will generate a new data using some sort of computation.
(defn f [x y] ... ...)
This is synonymous to how mathematicians express functions. $$ f(x, y) = \dots $$
(defn f ...) creates a top-level symbol
f that is bound to
a 2-arity function.
Mathematicians invoke functions all the time: $f(f(\pi, 1), 2)$. Clojure presents function invocations as a list, with the first element as function, and the rest as the arguments.
(f (f π 1) 2)