Clojure: Warum sollte eine Funktion deklariert werden, wenn sie vor der Definition im Quellcode aufgerufen wird?

In Clojure, wenn Sie eine Funktion vor ihrer Definition aufrufen, z. B.

(foo (bar 'a))

(defn bar [] ...)

it wird nicht kompiliert. Man sollte @ hinzufüg

(declare bar)

Vor(foo (bar 'a)). Warum ist Clojure so konzipiert? Ich meine, in den meisten Sprachen, mit Ausnahme von C / C ++, wie Java, Python, PHP, Scala, Haskell oder sogar anderen Lisps, insbesondere in Sprachen mit dynamischem Typ, ist keine Funktionsdeklaration erforderlich, das heißt, die Funktionsdefinition könnte auch gestellt werden vor oder nach einem anruf. Die Benutzung ist mir unangenehm.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage