Anche se posso interpretare erroneamente il concetto di omoiconicità, l'ho capito come "codice in dati".È possibile decomporre una funzione Clojure?
Quindi, posso scrivere codice come questo:
(def subject "world")
(def helo '(str "Hello " subject))
A questo punto, helo
è solo i dati, ma può essere eseguito come codice come questo:
(eval helo)
che restituisce "mondo Ciao ".
posso anche continuare a trattare come dati helo
:
(first helo)
(count helo)
che restituisce rispettivamente str
e 3
.
Fin qui tutto bene. Tuttavia, non appena mi avvolgo il codice in una funzione, mi sembra di perdere la capacità di trattare il codice come dati:
(defn helofn [subject]
(str "Hello " subject))
Come si decompongono helofn
? Sembra che non possa trattarlo come dati; se faccio questo:
(count helofn)
ottengo un'eccezione:
java.lang.UnsupportedOperationException: conteggio non supportato su questo tipo: user $ helofn
C'è un altro modo per decomponi helofn
oppure mi sto aspettando troppo dall'omiconicità?