Clojure: Por que uma função deve ser `declarar 'se for chamada antes da definição no código-fonte
No Clojure, se você chamar uma função antes de sua definição, por exemplo,
(foo (bar 'a))
(defn bar [] ...)
não é compilado. Deve-se adicionar
(declare bar)
antes(foo (bar 'a))
. Por que Clojure é projetado como esse? Quero dizer, na maioria das linguagens, exceto em C / C ++, como Java, Python, PHP, Scala, Haskell ou mesmo outros Lisps, especialmente em linguagens de tipo dinâmico, a declaração de função não é necessária, ou seja, a definição da função pode ser colocada antes ou depois de uma chamada. Eu sinto desconfortável de usar.