Previous: Introduction to Structures, Up: Structures [Contents][Index]
structures
は
defstruct
で定義されたユーザー定義の構造体のリストです。
構造体を定義します。 構造体はシンボル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
は構造体の新しいインスタンスを生成します。
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]