Während ich das Konzept der Homoiconicity falsch interpretieren kann, habe ich es als "Code ist Daten" verstanden.Kann eine Clojure-Funktion zerlegt werden?
So kann ich Code wie folgt schreiben:
(def subject "world")
(def helo '(str "Hello " subject))
An diesem Punkt ist helo
nur Daten, sondern kann als Code wie folgt ausgeführt:
(eval helo)
, die „Hallo Welt zurück ".
Ich kann auch zur Behandlung von helo
als Daten weiter:
(first helo)
(count helo)
die jeweils str
und 3
zurückgibt.
So weit so gut. Aber sobald ich den Code in einer Funktion wickeln, scheine ich die Fähigkeit zu verlieren, um Code als Daten zu behandeln:
(defn helofn [subject]
(str "Hello " subject))
Wie zersetzen ich helofn
? Es scheint, dass ich es nicht als Daten behandeln kann; wenn ich dies tun:
(count helofn)
Ich erhalte eine Ausnahme:
java.lang.UnsupportedOperationException: Zählen Sie nicht auf diese Art unterstützt: Benutzer $ helofn
Gibt es eine andere Art und Weise zu zerlegen helofn
, oder erwarte ich nur zu viel von Homoiconicity?