Clojure: почему функция должна быть «объявлена», если она вызывается до определения в исходном коде
В Clojure, если вы вызываете функцию до ее определения, например,
(foo (bar 'a))
(defn bar [] ...)
это не скомпилировано. Надо добавить
(declare bar)
до(foo (bar 'a))
, Почему Clojure разработан так? Я имею в виду, что в большинстве языков, кроме C / C ++, таких как Java, Python, PHP, Scala, Haskell или даже других Лиспах, особенно в языках динамического типа, объявление функции не требуется, то есть определение функции может быть помещено либо до или после звонка. Мне неудобно пользоваться.