Previous: Introduction to Structures, Up: Structures   [Contents][Index]

5.8.2 Functions and Variables for Structures

グローバル変数: structures

structuresdefstructで定義されたユーザー定義の構造体のリストです。

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

構造体を定義します。 構造体はシンボルSと関連付けられた名前フィールドのリストa_1, …, a_nです。

構造体のインスタンスは演算子Sと正確にn個の引数を持つただの式です。 new(S)は構造体Sの新しいインスタンスを生成します。

ただのシンボルaである引数はフィールド名を指定します。 等式a = vである引数は フィールド名aとデフォルト値vを指定します。 デフォルト値は任意の式を取り得ます。

defstructは ユーザー定義の構造体のリストstructures上にSを入れます。

kill(S)は ユーザー定義の構造体のリストからSを取り除き、構造体定義を取り除きます。

例:

(%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)]
関数: new (S)
関数: new (S (v_1, …, v_n))

newは構造体の新しいインスタンスを生成します。

new(S)は 構造体Sの新しいインスタンスを生成します。 それぞれのフィールドは、もしデフォルト値があればデフォルト値を割り当てられ、 もしデフォルト値が構造体定義で指定されなかったなら、割り当てなしになります。

new(S(v_1, ..., v_n))は フィールドが値v_1, …, v_nに割り当てられた 構造体Sの新しいインスタンスを生成します。

例:

(%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)
演算子: @

@構造体フィールドアクセス演算子です。 式x@ aは 構造体インスタンスxのフィールドaの値を参照します。 フィールド名は評価されません。

もしxのフィールドaが値を割り当てられていないなら、 x@ aはそれ自身に評価されます。

kill(x@ a)xのフィールド値aを値を取り除きます。

例:

(%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

フィールド名は評価されません。

(%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: Introduction to Structures, Up: Structures   [Contents][Index]