Vorige: , Nach oben: Strukturen   [Inhalt][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

Vorige: , Nach oben: Strukturen   [Inhalt][Index]