In Clojure, se si chiama una funzione prima della sua definizione, ad es.Clojure: Perché una funzione dovrebbe essere `declare` se viene chiamata prima della definizione nel codice sorgente
(foo (bar 'a))
(defn bar [] ...)
non compilato. Uno dovrebbe aggiungere
(declare bar)
prima di (foo (bar 'a))
. Perché Clojure è progettato come questo? Voglio dire, nella maggior parte dei linguaggi, eccetto C/C++, come Java, Python, PHP, Scala, Haskell o anche altri Lisps, specialmente nei linguaggi di tipo dinamico, la dichiarazione delle funzioni non è necessaria, cioè la definizione della funzione potrebbe essere prima o dopo una chiamata. Lo sento scomodo da usare.
Eccellente che hai tirato fuori questi vecchi post HN con le spiegazioni di Rich Hickey. Stavo cercando di ritrovarli ancora per molto tempo. –
Significa anche che siete costretti a leggere il codice in modo coerente, vale a dire dal basso verso l'alto. Se guardi una funzione, allora sai che tutte le dichiarazioni al suo interno saranno sopra di esso nello spazio dei nomi, solo una piccola cosa ma è utile quando leggi il codice. – shmish111