2 @c versao pt_BR baseada no md5sum abaixo:
3 @c 400c5c7ab963bd345661eee17f3fd94c defstruct.texi
5 @c -----------------------------------------------------------------------------
7 @node Structures, , Arrays, Data Types and Structures
9 @c -----------------------------------------------------------------------------
12 * Introduction to Structures::
13 * Functions and Variables for Structures::
16 @c -----------------------------------------------------------------------------
17 @node Introduction to Structures, Functions and Variables for Structures, Structures, Structures
18 @subsection Introduction to Structures
19 @c -----------------------------------------------------------------------------
21 Maxima fornece uma agrega@,{c}@~{a}o simples de dados chamada de uma estrutura.
22 Uma estrutura @'{e} uma express@~{a}o na qual argumentos s@~{a}o identificados pelo nome (o campo nome)
23 e a express@~{a}o como um todo @'{e} identificada por seu operador (o nome da estrutura).
24 Um valor de campo pode ser qualquer express@~{a}o.
26 Uma estrutura @'{e} definida pela fun@,{c}@~{a}o @code{defstruct};
27 A vari@'{a}vel global @code{structures} @'{e} a lista das estruturas definidas pelo usu@'{a}rio.
28 A fun@,{c}@~{a}o @code{new} cria inst@^{a}ncias de estruturas.
29 O operador @code{@@} refere-se a campos.
30 O comando @code{kill(@var{S})} remove a defini@,{c}@~{a}o da estrutura @var{S},
31 e @code{kill(@var{x}@@ @var{a})} desassocia o campo @var{a} da inst@^{a}ncia de estrutura chamada @var{x}.
33 Na impress@~{a}o bonita do console de exibi@,{c}@~{a}o (com @code{display2d} igual a @code{true}),
34 inst@^{a}ncias de estruturas s@~{a}o mostradas com o valor de cada campo
35 representado como uma equa@,{c}@~{a}o, com o nome do campo no primeiro membro da equa@,{c}@~{a}o
36 e o valor no segundo membro.
37 (A equ@,{c}@~{a}o @'{e} somente uma constru@,{c}@~{a}o visual; somente o valor @'{e} armazenado atualmente.)
38 Na exibi@,{c}@~{a}o em uma linha (via @code{grind} ou com @code{display2d} igual a @code{false}),
39 inst@^{a}ncias de estrutura s@~{a}o mostradas sem os nomes dos capos.
41 N@~{a}o existe maneira de usar um nome de campo como um nome de fun@,{c}@~{a}o,
42 embora um valor de campo possa ser uma express@~{a}o lambda.
43 Tamb@'{e}m n@~{a}o podem os valores de campo serem restricos a certos tipos; qualquer campo pode receber qualqur tipo de express@~{a}o.
44 N@~{a}o existe maneira de fazer alguns campos acess@'{i}veis ou bloqueados em contextos diferentes;
45 todos os campos s@~{a}o sempre vis@'{i}veis.
47 @c -----------------------------------------------------------------------------
48 @node Functions and Variables for Structures, , Introduction to Structures, Structures
49 @subsection Functions and Variables for Structures
50 @c -----------------------------------------------------------------------------
52 @c -----------------------------------------------------------------------------
53 @defvr {Vari@'{a}vel global} structures
55 A vari@'{a}vel global @code{structures} @'{e} a lista de estruturas definidas pelo usu@'{a}rio e @'{e} criada por @code{defstruct}.
58 @category{Estruturas} @category{Vari@'{a}veis globais}
62 @c -----------------------------------------------------------------------------
63 @deffn {Fun@,{c}@~{a}o} defstruct @
64 @fname{defstruct} (@var{S}(@var{a_1}, @dots{}, @var{a_n})) @
65 @fname{defstruct} (@var{S}(@var{a_1} = @var{v_1}, @dots{}, @var{a_n} = @var{v_n}))
67 Define uma estrutura, que @'{e} uma lista de campos nomeados como @var{a_1}, @dots{},
68 @var{a_n} associada a um s@'{i}mbolo @var{S}.
69 Uma inst@^{a}ncia de uma estrutura @'{e} apenas uma express@~{a}o que tem um operador @var{S}
70 e exatamente @code{n} argumentos.
71 O comando @code{new(@var{S})} cria uma nova inst@^{a}ncia da estrutura @var{S}.
73 Um argumento que seja apenas um s@'{i}mbolo @var{a} especifica o nome de um campo.
74 Um argumento que @'{e} uma equa@,{c}@~{a}o @code{@var{a} = @var{v}} especifica o nome de campo @var{a}
75 e seu valor padr@~{a}o @var{v}.
76 O valor padr@~{a}o pode ser qualquer express@~{a}o.
78 A fun@,{c}@~{a}o @code{defstruct} coloca @var{S} na lista de estruturas definidas pelo usu@'{a}rio, @code{structures}.
80 O comando @code{kill(@var{S})} remove @var{S} da lista de estruturas definidas pelo usu@'{a}rio,
81 e remove a defini@,{c}@~{a}o da estrutura.
86 @c defstruct (foo (a, b, c));
89 @c defstruct (bar (v, w, x = 123, y = %pi));
96 (%i1) defstruct (foo (a, b, c));
102 (%i4) defstruct (bar (v, w, x = 123, y = %pi));
103 (%o4) [bar(v, w, x = 123, y = %pi)]
105 (%o5) [foo(a, b, c), bar(v, w, x = 123, y = %pi)]
107 (%o6) bar(v, w, x = 123, y = %pi)
111 (%o8) [bar(v, w, x = 123, y = %pi)]
115 @category{Estruturas}
119 @c -----------------------------------------------------------------------------
120 @deffn {Fun@,{c}@~{a}o} new @
121 @fname{new} (@var{S}) @
122 @fname{new} (@var{S} (@var{v_1}, @dots{}, @var{v_n}))
124 A fun@,{c}@~{a}o @code{new} cria novas inst@^{a}ncias de estruturas.
126 O comando @code{new(@var{S})} cria uma nova inst@^{a}ncia da estrutura @var{S}
127 na qual a cada campo @'{e} atribu@'{i}do seu valor padr@~{a}o, se ouver algum,
128 ou nenhum valor se nenhum valor padr@~{a}o for especificado na defini@,{c}@~{a}o da estrutura.
130 O comando @code{new(@var{S}(@var{v_1}, ..., @var{v_n}))} cria uma nova inst@^{a}ncia de @var{S}
131 na qual a campos s@~{a}o atribu@'{i}dos os valores @var{v_1}, @dots{}, @var{v_n}.
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{Estruturas}
154 @c -----------------------------------------------------------------------------
157 O operador @code{@@} @'{e} o operador de acesso a campo de estrutura.
158 A express@~{a}o @code{@var{x}@@ @var{a}} refere-se ao valor do campo @var{a} da inst@^{a}ncia de estrutura @var{x}.
159 O nome de campo @var{a} n@~{a}o @'{e} avaliado.
161 Se ao campo @var{a} na inst@^{a}ncia @var{x} n@~{a}o tiver sido atribu@'{i}do nenhum valor,
162 a express@~{a}o @code{@var{x}@@ @var{a}} avalia para si mesma.
164 O comando @code{kill(@var{x}@@ @var{a})} remove o valor do campo @var{a} na inst@^{a}ncia @var{x}.
169 @c defstruct (foo (x, y, z));
170 @c u : new (foo (123, a - b, %pi));
179 (%i1) defstruct (foo (x, y, z));
181 (%i2) u : new (foo (123, a - b, %pi));
182 (%o2) foo(x = 123, y = a - b, z = %pi)
188 (%o5) foo(x = 123, y = a - b, z = %e)
192 (%o7) foo(x = 123, y = a - b, z)
197 O nome de campo n@~{a}o @'{e} avaliado.
200 @c defstruct (bar (g, h));
210 (%i1) defstruct (bar (g, h));
229 @category{Estruturas} @category{Operadores}