Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / ja / defstruct.texi
blob494a8492573e749d9d6efa3626cd92f93c8c2d13
1 @c -----------------------------------------------------------------------------
2 @page
3 @node Structures, , Arrays, Data Types and Structures
4 @section Structures
5 @c -----------------------------------------------------------------------------
7 @menu
8 * Introduction to Structures::       
9 * Functions and Variables for Structures::       
10 @end menu
12 @c -----------------------------------------------------------------------------
13 @node Introduction to Structures, Functions and Variables for Structures, Structures, Structures
14 @subsection Introduction to Structures
15 @c -----------------------------------------------------------------------------
17 Maximaは構造体と呼ばれる簡単なデータ集合体を提供します。
18 構造体は
19 引数が名前(フィールド名)によって識別され、式全体が演算子(構造体名)によって識別される式です。
20 フィールド名は任意の式を取り得ます。
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}で使う)プリティプリンティングのコンソール表示では、
31 構造体インスタンスは、
32 左辺側にフィールド名、右辺側に値の式として表されたそれぞれのフィールドの値と一緒に
33 表示されます。
34 (等式は単に表示物です; 値だけが実際に保存されます。)
35 (@code{grind}を介してか、@code{display2d}を@code{false}で使う)1次元表示では
36 構造体はフィールド名ないで表示されます。
38 フィールド値はラムダ式でありえますが、フィールド名を関数名として使う方法はありません。
39 フィールドの値はあるタイプに制約することもできません;
40 任意のフィールドにはどんな種類の式に割り当てることができます。
41 フィールドを、違った文脈でアクセス可能にしたり不可能する方法はありません;
42 すべてのフィールドはいつも可視です。
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
52 @code{structures}は
53 @code{defstruct}で定義されたユーザー定義の構造体のリストです。
55 @opencatbox
56 @category{Structures}
57 @category{Global variables}
58 @closecatbox
59 @end defvr
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}))
65 構造体を定義します。
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}を指定します。
74 デフォルト値は任意の式を取り得ます。
76 @code{defstruct}は
77 ユーザー定義の構造体のリスト@code{structures}上に@var{S}を入れます。
79 @code{kill(@var{S})}は
80 ユーザー定義の構造体のリストから@var{S}を取り除き、構造体定義を取り除きます。
82 例:
84 @c ===beg===
85 @c defstruct (foo (a, b, c));
86 @c structures;
87 @c new (foo);
88 @c defstruct (bar (v, w, x = 123, y = %pi));
89 @c structures;
90 @c new (bar);
91 @c kill (foo);
92 @c structures;
93 @c ===end===
94 @example
95 (%i1) defstruct (foo (a, b, c));
96 (%o1)                    [foo(a, b, c)]
97 (%i2) structures;
98 (%o2)                    [foo(a, b, c)]
99 (%i3) new (foo);
100 (%o3)                     foo(a, b, c)
101 (%i4) defstruct (bar (v, w, x = 123, y = %pi));
102 (%o4)             [bar(v, w, x = 123, y = %pi)]
103 (%i5) structures;
104 (%o5)      [foo(a, b, c), bar(v, w, x = 123, y = %pi)]
105 (%i6) new (bar);
106 (%o6)              bar(v, w, x = 123, y = %pi)
107 (%i7) kill (foo);
108 (%o7)                         done
109 (%i8) structures;
110 (%o8)             [bar(v, w, x = 123, y = %pi)]
111 @end example
113 @opencatbox
114 @category{Structures}
115 @closecatbox
116 @end deffn
118 @c -----------------------------------------------------------------------------
119 @deffn  {関数} new (@var{S})
120 @deffnx {関数} new (@var{S} (@var{v_1}, @dots{}, @var{v_n}))
122 @code{new}は構造体の新しいインスタンスを生成します。
124 @code{new(@var{S})}は
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}の新しいインスタンスを生成します。
133 例:
135 @c ===beg===
136 @c defstruct (foo (w, x = %e, y = 42, z));
137 @c new (foo);
138 @c new (foo (1, 2, 4, 8));
139 @c ===end===
140 @example
141 (%i1) defstruct (foo (w, x = %e, y = 42, z));
142 (%o1)              [foo(w, x = %e, y = 42, z)]
143 (%i2) new (foo);
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)
147 @end example
149 @opencatbox
150 @category{Structures}
151 @closecatbox
152 @end deffn
154 @c -----------------------------------------------------------------------------
155 @deffn {演算子} @@
157 @code{@@}構造体フィールドアクセス演算子です。
158 式@code{@var{x}@@ @var{a}}は
159 構造体インスタンス@var{x}のフィールド@var{a}の値を参照します。
160 フィールド名は評価されません。
162 もし@var{x}のフィールド@var{a}が値を割り当てられていないなら、
163 @code{@var{x}@@ @var{a}}はそれ自身に評価されます。
165 @code{kill(@var{x}@@ @var{a})}は
166 @var{x}のフィールド値@var{a}を値を取り除きます。
168 例:
170 @c ===beg===
171 @c defstruct (foo (x, y, z));
172 @c u : new (foo (123, a - b, %pi));
173 @c u@z;
174 @c u@z : %e;
175 @c u;
176 @c kill (u@z);
177 @c u;
178 @c u@z;
179 @c ===end===
180 @example
181 (%i1) defstruct (foo (x, y, z));
182 (%o1)                    [foo(x, y, z)]
183 (%i2) u : new (foo (123, a - b, %pi));
184 (%o2)           foo(x = 123, y = a - b, z = %pi)
185 (%i3) u@@z;
186 (%o3)                          %pi
187 (%i4) u@@z : %e;
188 (%o4)                          %e
189 (%i5) u;
190 (%o5)            foo(x = 123, y = a - b, z = %e)
191 (%i6) kill (u@@z);
192 (%o6)                         done
193 (%i7) u;
194 (%o7)              foo(x = 123, y = a - b, z)
195 (%i8) u@@z;
196 (%o8)                          u@@z
197 @end example
199 フィールド名は評価されません。
201 @c ===beg===
202 @c defstruct (bar (g, h));
203 @c x : new (bar);
204 @c x@h : 42;
205 @c h : 123;
206 @c x@h;
207 @c x@h : 19;
208 @c x;
209 @c h;
210 @c ===end===
211 @example
212 (%i1) defstruct (bar (g, h));
213 (%o1)                      [bar(g, h)]
214 (%i2) x : new (bar);
215 (%o2)                       bar(g, h)
216 (%i3) x@@h : 42;
217 (%o3)                          42
218 (%i4) h : 123;
219 (%o4)                          123
220 (%i5) x@@h;
221 (%o5)                          42
222 (%i6) x@@h : 19;
223 (%o6)                          19
224 (%i7) x;
225 (%o7)                    bar(g, h = 19)
226 (%i8) h;
227 (%o8)                          123
228 @end example
230 @opencatbox
231 @category{Structures}
232 @category{Operators}
233 @closecatbox
234 @end deffn