2 @c versao pt_BR baseada no md5sum abaixo:
3 @c 891f9d709b041d14d27e375d36e1fd01 Arrays.texi
5 @c -----------------------------------------------------------------------------
7 @node Arrays, Structures, Lists, Data Types and Structures
9 @c -----------------------------------------------------------------------------
12 * Functions and Variables for Arrays::
15 @c -----------------------------------------------------------------------------
16 @node Functions and Variables for Arrays, , Arrays, Arrays
17 @subsection Functions and Variables for Arrays
18 @c -----------------------------------------------------------------------------
20 @c -----------------------------------------------------------------------------
22 @deffn {Fun@,{c}@~{a}o} array @
23 @fname{array} (@var{name}, @var{dim_1}, @dots{}, @var{dim_n}) @
24 @fname{array} (@var{name}, @var{type}, @var{dim_1}, @dots{}, @var{dim_n}) @
25 @fname{array} ([@var{name_1}, @dots{}, @var{name_m}], @var{dim_1}, @dots{}, @var{dim_n})
27 Cria um vetor est@'{a}tico @math{n}-dimensional. O valor @math{n} pode ser menor ou equal a 5.
28 Os subscritos para a @math{i}'@'{e}sima dimens@~{a}o s@~{a}o os inteiros variando de 0 a
31 O comando @code{array (@var{nome}, @var{dim_1}, ..., @var{dim_n})} cria um vetor est@'{a}tico
34 O comando @code{array (@var{nome}, @var{tipo}, @var{dim_1}, ..., @var{dim_n})} cria
35 um vetor est@'{a}tico, com elementos de um tipo espec@'{i}fico. O @var{tipo} pode ser @code{fixnum}
36 para inteiros de tamanho limitado ou @code{flonum} para n@'{u}meros em ponto flutuante.
38 O comando @code{array ([@var{nome_1}, ..., @var{nome_m}], @var{dim_1}, ..., @var{dim_n})}
39 cria @math{m} vetores est@'{a}ticos, todos de mesma dimens@~{a}o.
40 @c SAME TYPE AS WELL ??
42 @c THIS DISCUSSION OF UNDECLARED ARRAYS REALLY WANTS TO BE SOMEWHERE ELSE
43 Se o usu@'{a}rio coloca um valor em uma vari@'{a}vel de subscrito antes de declarar o
44 vetor est@'{a}tico que a vai usar, um vetor est@'{a}tico n@~{a}o declarado @'{e} criado.
45 Vetores est@'{a}ticos n@~{a}o declarados, tamb@'{e}m conhecidos como vetor est@'{a}tico adapt@'{a}vel (por que a adapta@,{c}@~{a}o
46 @'{e} feita sobre os subscritos), s@~{a}o mais gerais que vetores est@'{a}ticos
47 declarados. O usu@'{a}rio n@~{a}o declara seu tamanho m@'{a}ximo, e eles crescem
48 dinamicamente sendo ajustados @`{a} medida que mais elementos do vetor est@'{a}tico recebem valores. Os
49 subscritos de vetores est@'{a}ticos n@~{a}o declarados n@~{a}o precisam nem mesmo ser n@'{u}meros. Todavia,
50 a menos que um vetor est@'{a}tico seja muito rarefeito, @'{e} provavelmente mais eficiente
51 declarar o vetor est@'{a}tico assim que for poss@'{i}vel que continuar o vetor est@'{a}tico como n@~{a}o declarado. A fun@,{c}@~{a}o
52 @code{array} pode ser usada para transformar um vetor est@'{a}tico n@~{a}o declarado e um vetor est@'{a}tico
54 @c HOW DOES ONE CHANGE AN UNDECLARED ARRAY INTO A DECLARED ARRAY EXACTLY ??
57 @category{Vetores est@'{a}ticos}
61 @c -----------------------------------------------------------------------------
63 @deffn {Fun@,{c}@~{a}o} arrayapply (@var{A}, [@var{i_1}, @dots{}, @var{i_n}])
65 Avalia @code{@var{A} [@var{i_1}, ..., @var{i_n}]},
66 onde @var{A} @'{e} um vetor est@'{a}tico e @var{i_1}, @dots{}, @var{i_n} s@~{a}o inteiros.
68 @'{E} um clone de @mrefcomma{apply}
69 com a exce@,{c}@~{a}o de que o primeiro argumento @'{e} um vetor est@'{a}tico
70 ao inv@'{e}s de uma fun@,{c}@~{a}o.
73 @category{Express@~{o}es} @category{Vetores est@'{a}ticos}
77 @c -----------------------------------------------------------------------------
79 @deffn {Fun@,{c}@~{a}o} arrayinfo (@var{A})
81 Retorna informa@,{c}@~{o}es sobre o vetor est@'{a}tico @var{A}.
82 O argumento @var{A} pode ser um vetor est@'{a}tico declarado, um vetor est@'{a}tico n@~{a}o declarado (cresce por ajuste),
83 uma fun@,{c}@~{a}o de vetor est@'{a}tico, ou uma fun@,{c}@~{a}o de subscrito.
85 Para vetores est@'{a}ticos declarados, @code{arrayinfo} retorna uma lista compreendendo o @'{a}tomo
86 @code{declared}, o n@'{u}mero de dimens@~{o}es, e o tamanhode cada dimens@~{a}o.
87 Os elementos do vetor est@'{a}tico, associados ou n@~{a}o, s@~{a}o retornados atrav@'{e}s de
90 Para vetores est@'{a}ticos n@~{a}o declarados (hashed arrays), @code{arrayinfo} retorna uma lista
91 compreendendo o @'{a}tomo @code{hashed}, o n@'{u}mero de subscritos,
92 e os subscritos de todo elemento que tem um valor.
93 Os valores s@~{a}o retornados por @code{listarray}.
95 Quando o argumento de @var{A} for do tipo fun@,{c}@~{a}o de vetor est@'{a}tico, @code{arrayinfo} retorna uma lista que compreende o @'{a}tomo
96 @code{hashed}, o n@'{u}mero de subscritos,
97 e quaisquer valores de subscrito para os quais hoverem valores armazenados de fun@,{c}@~{a}o.
98 Os valores armazenados de fun@,{c}@~{a}o s@~{a}o retornados atrav@'{e}s da @code{listarray}.
100 Quando o argumento de @var{A} for do tipo fun@,{c}@~{a}o subscrita, @code{arrayinfo} retorna uma lista compreendendo o @'{a}tomo
101 @code{hashed}, o n@'{u}mero de subscritos,
102 e quaisquer valores de subscrito para os quais houverem express@~{o}es lambda.
103 As express@~{o}es lambda s@~{a}o retornadas atrav@'{e}s de @code{listarray}.
105 Veja tamb@'{e}m @mrefdot{listarray}
109 A @code{arrayinfo} e a @code{listarray} aplicadas a um vetor est@'{a}tico declarado.
120 (%i1) array (aa, 2, 3);
124 (%i2) aa [2, 3] : %pi;
128 (%i3) aa [1, 2] : %e;
132 (%i4) arrayinfo (aa);
133 (%o4) [declared, 2, [2, 3]]
136 (%i5) listarray (aa);
137 (%o5) [#####, #####, #####, #####, #####, #####, %e, #####,
138 #####, #####, #####, %pi]
142 A @code{arrayinfo} e a @code{listarray} aplicadas a vetor est@'{a}tico n@~{a}o declarado (hashed).
145 @c bb [QUALQUERCOISA] : (a + b)^2;
146 @c bb [OUTRACOISA] : (c - d)^3;
152 (%i1) bb [QUALQUERCOISA] : (a + b)^2;
157 (%i2) bb [OUTRACOISA] : (c - d)^3;
162 (%i3) arrayinfo (bb);
163 (%o3) [hashed, 1, [OUTRACOISA], [QUALQUERCOISA]]
166 (%i4) listarray (bb);
168 (%o4) [(c - d) , (b + a) ]
172 A @code{arrayinfo} e a @code{listarray} aplicadas a uma fun@,{c}@~{a}o de vetor est@'{a}tico.
175 @c cc [x, y] := y / x;
183 (%i1) cc [x, y] := y / x;
201 (%i4) arrayinfo (cc);
202 (%o4) [hashed, 2, [4, z], [u, v]]
205 (%i5) listarray (cc);
212 A @code{arrayinfo} e a @code{listarray} aplicadas a uma fun@,{c}@~{a}o de subscrito.
215 @c dd [x] (y) := y ^ x;
223 (%i1) dd [x] (y) := y ^ x;
231 (%o2) lambda([y], y )
236 (%o3) lambda([y], y )
239 (%i4) arrayinfo (dd);
240 (%o4) [hashed, 1, [b + a], [v - u]]
243 (%i5) listarray (dd);
245 (%o5) [lambda([y], y ), lambda([y], y )]
250 @category{Vetores est@'{a}ticos}
254 @c -----------------------------------------------------------------------------
256 @deffn {Fun@,{c}@~{a}o} arraymake (@var{A}, [@var{i_1}, @dots{}, @var{i_n}])
258 Retorna a express@~{a}o @code{@var{A}[@var{i_1}, ..., @var{i_n}]}.
259 O resultado @'{e} uma refer@^{e}ncia de vetor est@'{a}tico n@~{a}o declarado.
261 A @code{arraymake} @'{e} semelhante a @mrefcomma{funmake}
262 exceto que o valor de retorno
263 @'{e} uma referencia de vetor est@'{a}tico n@~{a}o declarado ao inv@'{e}s de uma chamada de fun@,{c}@~{a}o n@~{a}o avaliada.
267 @c arraymake (A, [1]);
268 @c arraymake (A, [k]);
269 @c arraymake (A, [i, j, 3]);
270 @c array (A, fixnum, 10);
271 @c fillarray (A, makelist (i^2, i, 1, 11));
272 @c arraymake (A, [5]);
274 @c L : [a, b, c, d, e];
275 @c arraymake ('L, [n]);
277 @c A2 : make_array (fixnum, 10);
278 @c fillarray (A2, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
279 @c arraymake ('A2, [8]);
284 (%i1) arraymake (A, [1]);
289 (%i2) arraymake (A, [k]);
294 (%i3) arraymake (A, [i, j, 3]);
299 (%i4) array (A, fixnum, 10);
303 (%i5) fillarray (A, makelist (i^2, i, 1, 11));
307 (%i6) arraymake (A, [5]);
316 (%i8) L : [a, b, c, d, e];
317 (%o8) [a, b, c, d, e]
320 (%i9) arraymake ('L, [n]);
329 (%i11) A2 : make_array (fixnum, 10);
330 (%o11) @{Array: #(0 0 0 0 0 0 0 0 0 0)@}
333 (%i12) fillarray (A2, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
334 (%o12) @{Array: #(1 2 3 4 5 6 7 8 9 10)@}
337 (%i13) arraymake ('A2, [8]);
348 @category{Express@~{o}es} @category{Vetores est@'{a}ticos}
352 @c -----------------------------------------------------------------------------
354 @defvr {Vari@'{a}vel de sistema} arrays
355 Valor padr@~{a}o: @code{[]}
357 A vari@'{a}vel de sistema @code{arrays} @'{e} uma lista de vetores est@'{a}ticos que tenha sido alocados.
358 Essa lista compreende vetores est@'{a}ticos declarados por @code{array}, vetores est@'{a}ticos adapt@'{a}veis constru@'{i}dos por
359 defini@,{c}@~{a}o inpl@'{i}cita (atribuindo alguma coisa ao elemento do vetor est@'{a}tico),
360 e fun@,{c}@~{o}es de vetor est@'{a}tico definidas por @code{:=} e por @code{define}.
361 Vetores est@'{a}ticos definidos por @mref{make_array}
362 n@~{a}o est@~{a}o incl@'{i}dos.
365 @mrefcomma{array} @mrefcomma{arrayapply} @mrefcomma{arrayinfo}
366 @w{} @mrefcomma{arraymake} @mrefcomma{fillarray} @mrefcomma{listarray}
368 @c IS THIS AN EXHAUSTIVE LIST ??
374 @c bb [QUALQUERCOISA] : (a + b)^2;
376 @c dd : make_array ('any, 7);
381 (%i1) array (aa, 5, 7);
385 (%i2) bb [QUALQUERCOISA] : (a + b)^2;
390 (%i3) cc [x] := x/100;
396 (%i4) dd : make_array ('any, 7);
397 (%o4) @{Array: #(NIL NIL NIL NIL NIL NIL NIL)@}
406 @category{Vetores est@'{a}ticos} @category{Vari@'{a}veis globais}
410 @c -----------------------------------------------------------------------------
411 @anchor{arraysetapply}
412 @deffn {Fun@,{c}@~{a}o} arraysetapply (@var{A}, [@var{i_1}, @dots{}, @var{i_n}], @var{x})
414 Atribui o mesmo valor @var{x} a todos do @code{@var{A}[@var{i_1}, ..., @var{i_n}]},
415 onde @var{A} @'{e} um vetor est@'{a}tico e @var{i_1}, @dots{}, @var{i_n} s@~{a}o inteiros.
417 A fun@,{c}@~{a}o @code{arraysetapply} avalia seus argumentos.
420 @category{Express@~{o}es} @category{Vetores est@'{a}ticos}
424 @c -----------------------------------------------------------------------------
426 @deffn {Fun@,{c}@~{a}o} fillarray (@var{A}, @var{B})
428 Preenche o vetor est@'{a}tico @var{A} a partir de @var{B}, que @'{e} uma lista ou um vetor est@'{a}tico.
430 Se um tipo espec@'{i}fico for declarado para @var{A} quando ele tiver sido criado,
431 o vetor est@'{a}tico @var{A} pode somente ser preenchido com elementos daquele mesmo tipo especificado durante a cria@,{c}@~{a}o;
432 Constitui um erro se uma tentativa for feita paa copiar um elemento de tipo diferentes.
434 Se as dimens@~{o}es dos vetores est@'{a}ticos @var{A} e @var{B} forem
435 diferentes, @var{A} @'{e} preenchido seguindo a ordem principal por linha
436 @footnote{Nota do tradutor: o primeiro elemento de cada linha a partir
437 da segunda @'{e} preenchido ap@'{o}s o @'{u}ltimo elemento da linha que a precede ser
438 preenchido. Na ordem principal por coluna o primeiro elemento de cada coluna a partir
439 da segunda @'{e} preenchido ap@'{o}s o @'{u}ltimo elemento da coluna que a precede ser
440 preenchido.}. Se n@~{a}o ouverem elementos
441 suficientes em @var{B} o @'{u}ltimo elemento @'{e} usado para preencher o
442 restante de @var{A}. Se ouverem elementos demais, os que sobrarem ser@~{a}o igonorados.
444 A fun@,{c}@~{a}o @code{fillarray} returns its first argument.
448 Cria um vetor est@'{a}tico de 9 elementos e preenche-o a partir de uma lista.
450 @c array (a1, fixnum, 8);
452 @c fillarray (a1, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
457 (%i1) array (a1, fixnum, 8);
461 (%i2) listarray (a1);
462 (%o2) [0, 0, 0, 0, 0, 0, 0, 0, 0]
465 (%i3) fillarray (a1, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
469 (%i4) listarray (a1);
470 (%o4) [1, 2, 3, 4, 5, 6, 7, 8, 9]
474 Quando ouverem elementos a menos para preencher o vetor est@'{a}tico,
475 o @'{u}ltimo elemento @'{e} repetido.
476 Quando ouverem elementos a mais para preencher o vetor est@'{a}tico,
477 os elementos extras s@~{a}o ignorados.
479 @c a2 : make_array (fixnum, 8);
480 @c fillarray (a2, [1, 2, 3, 4, 5]);
481 @c fillarray (a2, [4]);
482 @c fillarray (a2, makelist (i, i, 1, 100));
486 (%i1) a2 : make_array (fixnum, 8);
487 (%o1) @{Array: #(0 0 0 0 0 0 0 0)@}
490 (%i2) fillarray (a2, [1, 2, 3, 4, 5]);
491 (%o2) @{Array: #(1 2 3 4 5 5 5 5)@}
494 (%i3) fillarray (a2, [4]);
495 (%o3) @{Array: #(4 4 4 4 4 4 4 4)@}
498 (%i4) fillarray (a2, makelist (i, i, 1, 100));
499 (%o4) @{Array: #(1 2 3 4 5 6 7 8)@}
503 /vetores est@'{a}ticos multidimensionais s@~{a}o preenchidos na ordem principal por linha.
506 @c a3 : make_array (fixnum, 2, 5);
507 @c fillarray (a3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
508 @c a4 : make_array (fixnum, 5, 2);
509 @c fillarray (a4, a3);
513 (%i1) a3 : make_array (fixnum, 2, 5);
514 (%o1) @{Array: #2A((0 0 0 0 0) (0 0 0 0 0))@}
517 (%i2) fillarray (a3, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
518 (%o2) @{Array: #2A((1 2 3 4 5) (6 7 8 9 10))@}
521 (%i3) a4 : make_array (fixnum, 5, 2);
522 (%o3) @{Array: #2A((0 0) (0 0) (0 0) (0 0) (0 0))@}
525 (%i4) fillarray (a4, a3);
526 (%o4) @{Array: #2A((1 2) (3 4) (5 6) (7 8) (9 10))@}
531 @category{Vetores est@'{a}ticos}
535 @c -----------------------------------------------------------------------------
537 @deffn {Fun@,{c}@~{a}o} listarray (@var{A})
539 Retorna uma lista dos elementos de vetor est@'{a}tico @var{A}.
540 O argumento @var{A} pode ser um vetor est@'{a}tico declarado, um vetor est@'{a}tico n@~{a}o declarado (desordenado),
541 uma fun@,{c}@~{a}o de vetor est@'{a}tico, ou uma fun@,{c}@~{a}o de sobrescrito.
543 Elementos s@~{a}o listados seguindo a ordem principal por linha.
544 Isto @'{e}, elementos s@~{a}o ordenados conforme o primeiro @'{i}ndice, a seguir conforme
545 o segundo @'{i}ndice, e assim por diante. A sequ@^{e}ncia de ordena@,{c}@~{a}o dos valores de @'{i}ndice @'{e} a mesma que
546 a ordem estabelecida por @mrefdot{orderless}
548 Para vetores est@'{a}ticos n@~{a}o declarados, fun@,{c}@~{o}es de vetor est@'{a}tico, e fun@,{c}@~{o}es de subscrito,
549 os elementos correspondem aos valores de @'{i}ndice retornados por @mrefdot{arrayinfo}
551 Elementos n@~{a}o associados de vetores est@'{a}ticos gerais declarados (isto @'{e}, n@~{a}o @code{fixnum} e n@~{a}o
552 @code{flonum}) s@~{a}o retornados como @code{#####}.
553 Elementos n@~{a}o associados de vetores est@'{a}ticos declarados do tipo @code{fixnum} ou @code{flonum}
554 s@~{a}o retornados como 0 ou como 0.0, respectivamente.
555 Elementos n@~{a}o associados de vetores est@'{a}ticos n@~{a}o declarados, fun@,{c}@~{o}es de vetor est@'{a}tico,
556 e fun@,{c}@~{o}es de subscrito n@~{a}o s@~{a}p retornados.
560 A @code{listarray} e a @code{arrayinfo} aplicadas a um vetor est@'{a}tico declarado.
571 (%i1) array (aa, 2, 3);
575 (%i2) aa [2, 3] : %pi;
579 (%i3) aa [1, 2] : %e;
583 (%i4) listarray (aa);
584 (%o4) [#####, #####, #####, #####, #####, #####, %e, #####,
585 #####, #####, #####, %pi]
588 (%i5) arrayinfo (aa);
589 (%o5) [declared, 2, [2, 3]]
593 A @code{listarray} e a @code{arrayinfo} aplicadas a vetores est@'{a}ticos n@~{a}o declarados (desordenado).
596 @c bb [QUALQUERCOISA] : (a + b)^2;
597 @c bb [OUTRACOISA] : (c - d)^3;
603 (%i1) bb [QUALQUERCOISA] : (a + b)^2;
608 (%i2) bb [OUTRACOISA] : (c - d)^3;
613 (%i3) listarray (bb);
615 (%o3) [(c - d) , (b + a) ]
618 (%i4) arrayinfo (bb);
619 (%o4) [hashed, 1, [OUTRACOISA], [QUALQUERCOISA]]
623 A @code{listarray} e a @code{arrayinfo} aplicadas a uma fun@,{c}@~{a}o de vetor est@'{a}tico.
626 @c cc [x, y] := y / x;
634 (%i1) cc [x, y] := y / x;
652 (%i4) listarray (cc);
658 (%i5) arrayinfo (cc);
659 (%o5) [hashed, 2, [4, z], [u, v]]
663 A @code{listarray} e a @code{arrayinfo} aplicadas a uma fun@,{c}@~{a}o de subscritos.
666 @c dd [x] (y) := y ^ x;
674 (%i1) dd [x] (y) := y ^ x;
682 (%o2) lambda([y], y )
687 (%o3) lambda([y], y )
690 (%i4) listarray (dd);
692 (%o4) [lambda([y], y ), lambda([y], y )]
695 (%i5) arrayinfo (dd);
696 (%o5) [hashed, 1, [b + a], [v - u]]
701 @category{Vetores est@'{a}ticos}
705 @c NEEDS CLARIFICATION
707 @c -----------------------------------------------------------------------------
709 @deffn {Fun@,{c}@~{a}o} make_array (@var{tipo}, @var{dim_1}, @dots{}, @var{dim_n})
711 Cria e retorna um vetor est@'{a}tico de Lisp. O @var{tipo} pode
712 ser @code{any}, @code{flonum}, @code{fixnum}, @code{hashed} ou
714 Exitem @math{n} @'{i}ndices,
715 e o @math{i}'-@'{e}simo @'{i}ndice vai de 0 a @math{@var{dim_i} - 1}.
717 A vantagem de @code{make_array} sobre @mref{array}
718 @'{e} que o valor de retorno
719 n@~{a}o tem um nome, e uma vez que um apontador para @code{make_array} se propaga, @code{make_array} ir@'{a} tambẽm se propagar.
720 Por exemplo, se @code{y: make_array (...)} ent@~{a}o @code{y} aponta para um objeto
721 que ocupa espa@,{c}o, mas ap@'{o}s @code{y: false}, @code{y} n@~{a}o mais
722 aponta para aquele objeto, ent@~{a}o o objeto pode ser apagado e seu espa@,{c}o de mem@'{o}ria liberado.
724 @c 'FUNCTIONAL ARGUMENT IN MAKE_ARRAY APPEARS TO BE BROKEN
725 @c EVEN AFTER READING THE CODE (SRC/AR.LISP) I CAN'T TELL HOW THIS IS SUPPOSED TO WORK
726 @c COMMENTING OUT THIS STUFF TO PREVENT CONFUSION AND HEARTBREAK
727 @c RESTORE IT WHEN MAKE_ARRAY ('FUNCTIONAL, ...) IS FIXED
728 @c @code{y: make_array ('functional, 'f, 'hashed, 1)} - the second argument to
729 @c @code{make_array} in this case is the function to call to calculate array
730 @c elements, and the rest of the arguments are passed recursively to
731 @c @code{make_array} to generate the "memory" for the array function object.
736 @c A1 : make_array (fixnum, 10);
739 @c A2 : make_array (flonum, 10);
740 @c A2 [2] : 2.718281828;
742 @c A3 : make_array (any, 10);
743 @c A3 [4] : x - y - z;
745 @c A4 : make_array (fixnum, 2, 3, 5);
746 @c fillarray (A4, makelist (i, i, 1, 2*3*5));
751 (%i1) A1 : make_array (fixnum, 10);
752 (%o1) @{Array: #(0 0 0 0 0 0 0 0 0 0)@}
760 (%o3) @{Array: #(0 0 0 0 0 0 0 0 1729 0)@}
763 (%i4) A2 : make_array (flonum, 10);
764 (%o4) @{Array: #(0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0)@}
767 (%i5) A2 [2] : 2.718281828;
773 @{Array: #(0.0 0.0 2.718281828 0.0 0.0 0.0 0.0 0.0 0.0 0.0)@}
776 (%i7) A3 : make_array (any, 10);
777 (%o7) @{Array: #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)@}
780 (%i8) A3 [4] : x - y - z;
785 (%o9) @{Array: #(NIL NIL NIL NIL ((MPLUS SIMP) $X ((MTIMES SIMP)\
786 -1 $Y) ((MTIMES SIMP) -1 $Z))
787 NIL NIL NIL NIL NIL)@}
790 (%i10) A4 : make_array (fixnum, 2, 3, 5);
791 (%o10) @{Array: #3A(((0 0 0 0 0) (0 0 0 0 0) (0 0 0 0 0)) ((0 0 \
792 0 0 0) (0 0 0 0 0) (0 0 0 0 0)))@}
795 (%i11) fillarray (A4, makelist (i, i, 1, 2*3*5));
796 (%o11) @{Array: #3A(((1 2 3 4 5) (6 7 8 9 10) (11 12 13 14 15))
797 ((16 17 18 19 20) (21 22 23 24 25) (26 27 28 29 30)))@}
806 @category{Vetores est@'{a}ticos}
810 @c DOES THIS MODIFY A OR DOES IT CREATE A NEW ARRAY ??
812 @c -----------------------------------------------------------------------------
814 @deffn {Fun@,{c}@~{a}o} rearray (@var{A}, @var{dim_1}, @dots{}, @var{dim_n})
816 Muda a dimens@~{a}o de um vetor est@'{a}tico.
817 O novo vetor est@'{a}tico ser@'{a} preenchido com os elementos do antigo na
818 ordem principal por linha. Se o antigo for muito pequeno,
819 os restantes elementos s@~{a}o preenchidos com
820 @code{false}, @code{0.0} ou @code{0},
821 dependendo do tipo de declara@,{c}@~{a}o do veor est@'{a}tico que est@'{a} sendo modificado. O tipo de vetor est@'{a}tico n@~{a}o pode ser
825 @category{Vetores est@'{a}ticos}
829 @c -----------------------------------------------------------------------------
831 @deffn {Fun@,{c}@~{a}o} remarray @
832 @fname{remarray} (@var{A_1}, @dots{}, @var{A_n}) @
833 @fname{remarray} (all)
835 Remove vetores est@'{a}ticos e fun@,{c}@~{o}es associadas a vetores est@'{a}ticos associados e libera o espa@,{c}o de armazenamento usado.
836 Os argumentos podem ser vetores est@'{a}ticos declarados, n@~{a}o declarados (desordenados), fun@,{c}@~{o}es de vetores
837 est@'{a}ticos, e fn@,{c}@~{o}es de subscritos.
839 O comando @code{remarray (all)} remove todos os itens na lista global @mrefdot{arrays}
841 @c WHAT DOES THIS MEAN EXACTLY ??
842 Pode ser necess@'{a}rio usar essa fun@,{c}@~{a}o se for
843 desejado redefinir os valores em um vetor est@'{a}tico desordenado.
845 A @code{remarray} retorna uma lista dos vetores est@'{a}ticos removidos.
847 A @code{remarray} n@~{a}o avalia seus argumentos.
850 @category{Vetores est@'{a}ticos}
854 @c -----------------------------------------------------------------------------
856 @deffn {Fun@,{c}@~{a}o} subvar (@var{x}, @var{i})
858 Avalia a express@~{a}o de subscrito @code{@var{x}[@var{i}]}.
860 A @code{subvar} avalia seus argumentos.
862 O comando @code{arraymake (@var{x}, [@var{i}])} constr@'{o}i a express@~{a}o
863 @code{@var{x}[@var{i}]}, mas n@~{a}o a avalia.
871 @c foo : [aa, bb, cc, dd, ee]$
873 @c arraymake (x, [i]);
884 (%i4) foo : [aa, bb, cc, dd, ee]$
890 (%i6) arraymake (x, [i]);
901 @category{Express@~{o}es} @category{Vetores est@'{a}ticos}
905 @c NEEDS EXPANSION AND EXAMPLES
907 @c -----------------------------------------------------------------------------
909 @deffn {Fun@,{c}@~{a}o} subvarp (@var{expr})
911 Returna @code{true} se @var{expr} for uma vari@'{a}vel de subscrito, por exemplo
915 @category{Fun@,{c}@~{o}es predicado}
919 @c THIS IS REALLY CONFUSING
921 @c -----------------------------------------------------------------------------
922 @anchor{use_fast_arrays}
923 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} use_fast_arrays
925 Se @code{true} ent@~{a}o somente dois tipos de vetores est@'{a}ticos s@~{a}o reconhecidos:
929 O vetor est@'{a}tico art-q (t no "Common Lisp") que pode ter muitas dimens@~{o}es
930 indexadas por inteiros, e pode conter qualquer objeto do Lisp ou do Maxima como uma
931 entrada. Para construir tal vetor est@'{a}tico, insira @code{a:make_array(any,3,4);}
932 ent@~{a}o @code{a} ter@'{a} como valor, um vetor est@'{a}tico com 12 posi@,{c}@~{o}es, e o
933 primeiro @'{i}ndice @'{e} o inteiro zero.
936 O vetor est@'{a}tico Hash_table que o tipo padr@~{a}o de vetor est@'{a}tico criado ao
937 se fazer @code{b[x+1]:y^2} (e se @code{b} j@'{a} n@~{a}o for um vetor est@'{a}tico, uma lista, ou uma
938 matriz -- se @code{b} for um desses um erro pode ser retornado uma vez que
939 @code{x+1} pode n@~{a}o ser um subscrito v@'{a}lido para um vetor est@'{a}tico art-q, uma lista ou
940 uma matriz). Seus @'{i}ndices (tamb@'{e}m conhecidos como chaves) podem ser quaisquer objetos.
941 O vetor est@'{a}tico Hash_table somente recebe uma chave de cada vez (@code{b[x+1,u]:y} pode ignorar @code{u}).
942 O referenciamento @'{e} feito por @code{b[x+1] ==> y^2}. Certamente a chave pode ser
943 uma lista, e.g. @code{b[[x+1,u]]:y} pode ser v@'{a}lido. @'{E} incompat@'{i}vel
944 com os antigos vetores est@'{a}ticos desordenados do Maxima, mas poupa recursos.
947 Uma vantagem de armazenar os vetores est@'{a}ticos como valores do s@'{i}mbolo @'{e} que
948 as conven@,{c}@~{o}es usuais sobre vari@'{a}veis locais de uma fun@,{c}@~{a}o aplicam-se ao vetor est@'{a}tico
949 tamb@'{e}m. O tipo Hash_table tambẽm usa menos recursos e @'{e} mais eficiente
950 que o tipo antigo de hashar do Maxima. Para obter comportamento consistente em
951 c@'{o}digos traduzidos e compilados provenientes das vers@~{o}es antigas ajuste @code{translate_fast_arrays} para
955 @category{Vetores est@'{a}ticos} @category{Global flags}