Homoiconicity

Homoikonizität (oder oder Selbst-Repräsentierbarkeit) bezeichnet die Eigenschaft einiger Programmiersprachen, dass Programme gleichzeitig Datenstrukturen derselben Sprache sind. Jedes Clojure-Programm ist zugleich eine valide edn- Datenstuktur und kann ohne weiteres serialisiert werden.

Beispiel: Der (zugegeben simple) mathematische Ausdruck (+ (* 2 3) (- 3 1)) beschreibt eine Liste mit drei Elementen: dem Symbol + sowie zwei weiteren Listen (nennen wir sie l1 und l2). l1 enthält drei Symbole: +, 2 und 3. l2 enthält auch drei Symbole: -, 3 und 1.

Diese Verschachtelung von Symbolen entspricht folgenden Baum (Klammern nicht dargestellt, sondern beschreiben die Tiefe der Schachtelung):

       +
     /   \
    *     -
   / \   / \
  2   3 3   1

Ebenso ist die Definition einer Liste mittels (def my-list (list (1 2 3))) letztlich folgender Baum:

     def
   /     \
my-list  list
         / | \
        1  2  3

Oder die Definition einer Funktion (def my-add (fn [a b] (+ a b))) (eine Clojure-spezifische Ausnahme ist hier der Vektor, welche die Parameter gruppiert - in CommonLisp werden auch Parameter als Liste übergeben):

    def
    /  \
my-add   fn
        /   \
      [a b]  +
            / \
           a   b

Alle Ausdrücke sind syntaktisch Baumstrukturen und somit valide Daten - ein weiteres Schlagwort dafür lautet Code as Data.

Um Datenstrukturen zu evaluieren, besitzt der LISP-Interpreter folgende Anweisung:

Das erste Element einer Liste beschreibt den Namen der zu evaluierenden Funktion - alle weiteren Elemente sind Parameter der Funktion.

Ein LISP ist somit definiert anhand seiner Evaluationsstrategie, nicht seiner Syntax. Dies wird unter anderem später interessant sein für die Makros.

results matching ""

    No results matching ""