Chociaż mogę niepoprawnie interpretować pojęcie homoiconicity, rozumiem to jako "kod będący danymi".Czy można rozłożyć funkcję Clojure?
więc mogę napisać kod jak poniżej:
(def subject "world")
(def helo '(str "Hello " subject))
W tym momencie helo
to tylko dane, ale może być wykonany jako kod tak:
(eval helo)
która zwraca „Hello world ".
Mogę też nadal traktować helo
danych:
(first helo)
(count helo)
która zwraca odpowiednio str
i 3
.
tej pory tak dobrze. Jednak jak tylko owinąć kod w funkcji, wydaje mi się tracić zdolność do traktowania jako dane kodu:
(defn helofn [subject]
(str "Hello " subject))
Jak rozkładają helofn
? Wydaje się, że nie mogę traktować tego jako danych; jeśli mogę to zrobić:
(count helofn)
uzyskać wyjątek:
java.lang.UnsupportedOperationException: Ilość nie jest obsługiwany w tej kategorii: Użytkownik $ helofn
Czy istnieje inny sposób rozkładać helofn
, czy też po prostu oczekuję zbyt wiele od homoiczności?