When you specify a symbol for the name fn , it is bound only to the function definition to the function object itself. This allows anonymous functions to call themselves ( Clojure - special forms ).
So, to create a function with fn associated with a globally accessible name, you should use
(def somename (fn ...body...
and defn is just a shortcut to this.
(defn somename ...body...
In response to your comment, from fresh repl:
Give me some Clojure: > (fn foo [] (+ 1 3))
As you can see, I cannot call the foo function created with fn because it is not bound to Var.
sloth source share