Previous: Einführung in Strukturen, Up: Strukturen [Contents][Index]

#### 5.6.2 Funktionen und Variablen für Strukturen

Systemvariable: structures

  `structures` ist eine Informationsliste, die die vom Benutzer mit der Funktion `defstruct` definierten Strukturen enthält.

Funktion: defstruct (S(a_1, …, a_n))
Funktion: defstruct (S(a_1 = v_1, …, a_n = v_n))

  Definiert eine Struktur, als eine Liste mit den Feldnamen a_1, …, a_n und dem Namen S für die Struktur. Eine Instanz einer Struktur ist ein Ausdruck mit dem Operator S und n Argumenten, die die Werte der Felder sind. Mit dem Kommando `new(S` wird eine neue Instanz einer Struktur S generiert. Siehe auch `new`.

  Mit einem Symbol a als Argument wird der Name eines Feldes bezeichnet. Mit einer Gleichung `a = v` wird der Name des Feldes als a bezeichnet und ein Standardwert v definiert. Der Standardwert v kann ein beliebiger Ausdruck sein.

  `defstruct` legt die Definition der Struktur S in der Informationsliste `structures` ab.

  Mit dem Kommando `kill(S)` wird die Definition einer Struktur gelöscht und von der Informationsliste `structures` entfernt.

  Beispiele:

      (%i1) defstruct (foo (a, b, c));
      (%o1)                    [foo(a, b, c)]
      (%i2) structures;
      (%o2)                    [foo(a, b, c)]
      (%i3) new (foo);
      (%o3)                     foo(a, b, c)
      (%i4) defstruct (bar (v, w, x = 123, y = %pi));
      (%o4)             [bar(v, w, x = 123, y = %pi)]
      (%i5) structures;
      (%o5)      [foo(a, b, c), bar(v, w, x = 123, y = %pi)]
      (%i6) new (bar);
      (%o6)              bar(v, w, x = 123, y = %pi)
      (%i7) kill (foo);
      (%o7)                         done
      (%i8) structures;
      (%o8)             [bar(v, w, x = 123, y = %pi)]

Funktion: new (S)
Funktion: new (S (v_1, …, v_n))

  `new` erzeugt eine neue Instanz einer Struktur.

  Das Kommando `new(S)` erzeugt eine neue Instanz der Struktur S, die mit der Funktion `defstruct` definiert wurde. Die Felder werden mit den Standardwerten belegt, wenn die Definition der Struktur Standardwerte enthält. Ansonsten erhalten die Felder keine Werte.

  Das Kommando `new(S(v_1, ..., v_n))` erzeugt eine neue Instanz der Struktur S, wobei die Felder mit den Werten v_1, …, v_n initialisiert werden.

  Beispiele:

      (%i1) defstruct (foo (w, x = %e, y = 42, z));
      (%o1)              [foo(w, x = %e, y = 42, z)]
      (%i2) new (foo);
      (%o2)               foo(w, x = %e, y = 42, z)
      (%i3) new (foo (1, 2, 4, 8));
      (%o3)            foo(w = 1, x = 2, y = 4, z = 8)

Operator: @

  `@` ist der Operator für den Zugriff auf ein Feld einer Struktur. Der Ausdruck `x@a` bezeichnet das Feld a der Instanz x einer Struktur. Der Feldname wird nicht ausgewertet.

  Hat das Feld a der Instanz x keinen Wert, wird der Ausdruck `x@a` zu sich selbst ausgewertet.

  `kill(x@a)` löscht den Wert des Feldes a der Instanz x einer Struktur.

  Beispiele:

      (%i1) defstruct (foo (x, y, z));
      (%o1)                    [foo(x, y, z)]
      (%i2) u : new (foo (123, a - b, %pi));
      (%o2)           foo(x = 123, y = a - b, z = %pi)
      (%i3) u@z;
      (%o3)                          %pi
      (%i4) u@z : %e;
      (%o4)                          %e
      (%i5) u;
      (%o5)            foo(x = 123, y = a - b, z = %e)
      (%i6) kill (u@z);
      (%o6)                         done
      (%i7) u;
      (%o7)              foo(x = 123, y = a - b, z)
      (%i8) u@z;
      (%o8)                          u@z

  Der Feldname wird nicht ausgewertet.

      (%i1) defstruct (bar (g, h));
      (%o1)                      [bar(g, h)]
      (%i2) x : new (bar);
      (%o2)                       bar(g, h)
      (%i3) x@h : 42;
      (%o3)                          42
      (%i4) h : 123;
      (%o4)                          123
      (%i5) x@h;
      (%o5)                          42
      (%i6) x@h : 19;
      (%o6)                          19
      (%i7) x;
      (%o7)                    bar(g, h = 19)
      (%i8) h;
      (%o8)                          123

Previous: Einführung in Strukturen, Up: Strukturen [Contents][Index]