1 @c -----------------------------------------------------------------------------
3 @node Structures, , Arrays, Data Types and Structures
5 @c -----------------------------------------------------------------------------
8 * Introduction to Structures::
9 * Functions and Variables for Structures::
12 @c -----------------------------------------------------------------------------
13 @node Introduction to Structures, Functions and Variables for Structures, Structures, Structures
14 @subsection Introduction to Structures
15 @c -----------------------------------------------------------------------------
17 Maximaは構造体と呼ばれる簡単なデータ集合体を提供します。
19 引数が名前(フィールド名)によって識別され、式全体が演算子(構造体名)によって識別される式です。
22 構造体は@code{defstruct}関数によって定義されます;
23 グローバル変数@code{structures}はユーザー定義の構造体のリストです。
24 関数@code{new}は構造体のインスタンスを生成します。
25 @code{@@}演算子はフィールドを参照します。
26 @code{kill(@var{S})}は構造体定義@var{S}を取り除き、
27 @code{kill(@var{x}@@ @var{a})}は
28 構造体インスタンス@var{x}のフィールド@var{a}をアンバインドします。
30 (@code{display2d}を@code{true}で使う)プリティプリンティングのコンソール表示では、
32 左辺側にフィールド名、右辺側に値の式として表されたそれぞれのフィールドの値と一緒に
34 (等式は単に表示物です; 値だけが実際に保存されます。)
35 (@code{grind}を介してか、@code{display2d}を@code{false}で使う)1次元表示では
38 フィールド値はラムダ式でありえますが、フィールド名を関数名として使う方法はありません。
39 フィールドの値はあるタイプに制約することもできません;
40 任意のフィールドにはどんな種類の式に割り当てることができます。
41 フィールドを、違った文脈でアクセス可能にしたり不可能する方法はありません;
44 @c -----------------------------------------------------------------------------
45 @node Functions and Variables for Structures, , Introduction to Structures, Structures
46 @subsection Functions and Variables for Structures
47 @c -----------------------------------------------------------------------------
49 @c -----------------------------------------------------------------------------
50 @defvr {グローバル変数} structures
53 @code{defstruct}で定義されたユーザー定義の構造体のリストです。
57 @category{Global variables}
61 @c -----------------------------------------------------------------------------
62 @deffn {関数} defstruct (@var{S}(@var{a_1}, @dots{}, @var{a_n}))
63 @deffnx {関数} defstruct (@var{S}(@var{a_1} = @var{v_1}, @dots{}, @var{a_n} = @var{v_n}))
66 構造体はシンボル@var{S}と関連付けられた名前フィールドのリスト@var{a_1}, @dots{}, @var{a_n}です。
68 構造体のインスタンスは演算子@var{S}と正確に@code{n}個の引数を持つただの式です。
69 @code{new(@var{S})}は構造体@var{S}の新しいインスタンスを生成します。
71 ただのシンボル@var{a}である引数はフィールド名を指定します。
72 等式@code{@var{a} = @var{v}}である引数は
73 フィールド名@var{a}とデフォルト値@var{v}を指定します。
77 ユーザー定義の構造体のリスト@code{structures}上に@var{S}を入れます。
80 ユーザー定義の構造体のリストから@var{S}を取り除き、構造体定義を取り除きます。
85 @c defstruct (foo (a, b, c));
88 @c defstruct (bar (v, w, x = 123, y = %pi));
95 (%i1) defstruct (foo (a, b, c));
101 (%i4) defstruct (bar (v, w, x = 123, y = %pi));
102 (%o4) [bar(v, w, x = 123, y = %pi)]
104 (%o5) [foo(a, b, c), bar(v, w, x = 123, y = %pi)]
106 (%o6) bar(v, w, x = 123, y = %pi)
110 (%o8) [bar(v, w, x = 123, y = %pi)]
114 @category{Structures}
118 @c -----------------------------------------------------------------------------
119 @deffn {関数} new (@var{S})
120 @deffnx {関数} new (@var{S} (@var{v_1}, @dots{}, @var{v_n}))
122 @code{new}は構造体の新しいインスタンスを生成します。
125 構造体@var{S}の新しいインスタンスを生成します。
126 それぞれのフィールドは、もしデフォルト値があればデフォルト値を割り当てられ、
127 もしデフォルト値が構造体定義で指定されなかったなら、割り当てなしになります。
129 @code{new(@var{S}(@var{v_1}, ..., @var{v_n}))}は
130 フィールドが値@var{v_1}, @dots{}, @var{v_n}に割り当てられた
131 構造体@var{S}の新しいインスタンスを生成します。
136 @c defstruct (foo (w, x = %e, y = 42, z));
138 @c new (foo (1, 2, 4, 8));
141 (%i1) defstruct (foo (w, x = %e, y = 42, z));
142 (%o1) [foo(w, x = %e, y = 42, z)]
144 (%o2) foo(w, x = %e, y = 42, z)
145 (%i3) new (foo (1, 2, 4, 8));
146 (%o3) foo(w = 1, x = 2, y = 4, z = 8)
150 @category{Structures}
154 @c -----------------------------------------------------------------------------
157 @code{@@}構造体フィールドアクセス演算子です。
158 式@code{@var{x}@@ @var{a}}は
159 構造体インスタンス@var{x}のフィールド@var{a}の値を参照します。
162 もし@var{x}のフィールド@var{a}が値を割り当てられていないなら、
163 @code{@var{x}@@ @var{a}}はそれ自身に評価されます。
165 @code{kill(@var{x}@@ @var{a})}は
166 @var{x}のフィールド値@var{a}を値を取り除きます。
171 @c defstruct (foo (x, y, z));
172 @c u : new (foo (123, a - b, %pi));
181 (%i1) defstruct (foo (x, y, z));
183 (%i2) u : new (foo (123, a - b, %pi));
184 (%o2) foo(x = 123, y = a - b, z = %pi)
190 (%o5) foo(x = 123, y = a - b, z = %e)
194 (%o7) foo(x = 123, y = a - b, z)
202 @c defstruct (bar (g, h));
212 (%i1) defstruct (bar (g, h));
231 @category{Structures}