Clojure: ¿Por qué una función debe ser 'declarar' si se llama antes de la definición en el código fuente?

En Clojure, si llama a una función antes de su definición, p.

(foo (bar 'a))

(defn bar [] ...)

No está compilado. Uno debe agregar

(declare bar)

antes de(foo (bar 'a)). ¿Por qué Clojure está diseñado así? Quiero decir, en la mayoría de los lenguajes, excepto C / C ++, como Java, Python, PHP, Scala, Haskell o incluso otros Lisps, especialmente en lenguajes de tipo dinámico, la declaración de función no es necesaria, es decir, la definición de función podría ser antes o después de una llamada. Me resulta incómodo de usar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta