1
@c english version 1.13
3
* Definiciones para Arrays::
6
@node Definiciones para Arrays, , Arrays, Arrays
7
@section Definiciones para Arrays
9
@deffn {Funci@'on} array (@var{nombre}, @var{dim_1}, ..., @var{dim_n})
10
@deffnx {Funci@'on} array (@var{nombre}, @var{type}, @var{dim_1}, ..., @var{dim_n})
11
@deffnx {Funci@'on} array ([@var{nombre_1}, ..., @var{nombre_m}], @var{dim_1}, ..., @var{dim_n})
13
Crea un array de dimensi@'on @math{n}, que debe ser menor o igual que 5. Los sub@'{@dotless{i}}ndices de la @math{i}-@'esima dimensi@'on son enteros que toman valores entre 0 y @var{dim_i}.
15
La llamada @code{array (@var{nombre}, @var{dim_1}, ..., @var{dim_n})} crea un array de tipo general.
17
La llamada @code{array (@var{nombre}, @var{type}, @var{dim_1}, ..., @var{dim_n})} crea un array con sus elementos del tipo especificado. El tipo @var{type} puede ser @code{fixnum} para enteros de tama@~no limitado o @code{flonum} para n@'umeros decimales en coma flotante.
19
La llamada @code{array ([@var{nombre_1}, ..., @var{nombre_m}], @var{dim_1}, ..., @var{dim_n})}
20
crea @math{m} arrays, todos ellos de igual dimensi@'on.
21
@c SAME TYPE AS WELL ??
23
@c THIS DISCUSSION OF UNDECLARED ARRAYS REALLY WANTS TO BE SOMEWHERE ELSE
24
Si el usuario asigna un valor a una variable subindicada antes de declarar el array correspondiente, entonces se construye un array no declarado. Los arrays no declarados, tambi@'en conocidos por el nombre de "arrays de claves" (hashed arrays), son m@'as generales que los arrays declarados. El usuario no necesita declarar su tama@~no m@'aximo y pueden ir creciendo de forma din@'amica. Los sub@'{@dotless{i}}ndices de los arrays no declarados no necesitan ser necesariamente n@'umeros. Sin embargo, a menos que un array tenga sus elementos dispersos, probablemente sea m@'as eficiente declararlo siempre que sea posible antes que dejarlo como no declarado. La funci@'on @code{array} puede utilizarse para transformar un array no declarado a a uno declarado.
25
@c HOW DOES ONE CHANGE AN UNDECLARED ARRAY INTO A DECLARED ARRAY EXACTLY ??
29
@deffn {Funci@'on} arrayapply (@var{A}, [@var{i_1}, ..., @var{i_n}])
30
Eval@'ua @code{@var{A} [@var{i_1}, ..., @var{i_n}]}, donde @var{A} es un array y @var{i_1}, ..., @var{i_n} son enteros.
32
Esto es como @code{apply}, excepto por el hecho de que el primer argumento es un array en lugar de una funci@'on.
36
@deffn {Funci@'on} arrayinfo (@var{A})
37
Devuelve informaci@'on sobre el array@var{A}.
38
El argumento @var{A} puede ser un array declarado o no declarado,
39
una funci@'on array o una funci@'on subindicada.
41
En el caso de arrays declarados, @code{arrayinfo} devuelve una
42
lista que contiene el @'atomo @code{declared}, el n@'umero de
43
dimensiones y el tama@~no de cada dimensi@'on.
44
Los elementos del array, tanto los que tienen valores
45
asignados como los que no, son devueltos por @code{listarray}.
47
En el caso de arrays no declarados (@i{hashed arrays}), @code{arrayinfo}
48
devuelve una lista que contiene el @'atomo @code{hashed}, el n@'umero
49
de sub@'{@dotless{i}}ndices y los sub@'{@dotless{i}}ndices de aquellos
50
elementos que guarden un valor. Los valores son devueltos por @code{listarray}.
52
En el caso de funciones array, @code{arrayinfo} devuelve una lista que
53
contiene el @'atomo @code{hashed}, el n@'umero de sub@'{@dotless{i}}ndices
54
y los sub@'{@dotless{i}}ndices para los que la funci@'on tiene valores almacenados.
55
Los valores almacenados de la funci@'on array son devueltos por @code{listarray}.
57
En el caso de funciones subindicadas, @code{arrayinfo} devuelve una lista que
58
contiene el @'atomo @code{hashed}, el n@'umero de sub@'{@dotless{i}}ndices y
59
los sub@'{@dotless{i}}ndices para los que hay expresiones lambda.
60
Las expresiones lambda son devueltas por @code{listarray}.
64
@code{arrayinfo} y @code{listarray} aplicadas a una array declarado.
74
(%i1) array (aa, 2, 3);
76
(%i2) aa [2, 3] : %pi;
81
(%o4) [declared, 2, [2, 3]]
83
(%o5) [#####, #####, #####, #####, #####, #####, %e, #####,
84
#####, #####, #####, %pi]
87
@code{arrayinfo} y @code{listarray} aplicadas a una array no declarado (@i{hashed arrays}).
90
@c bb [FOO] : (a + b)^2;
91
@c bb [BAR] : (c - d)^3;
96
(%i1) bb [FOO] : (a + b)^2;
99
(%i2) bb [BAR] : (c - d)^3;
102
(%i3) arrayinfo (bb);
103
(%o3) [hashed, 1, [BAR], [FOO]]
104
(%i4) listarray (bb);
106
(%o4) [(c - d) , (b + a) ]
109
@code{arrayinfo} y @code{listarray} aplicadas a una funci@'on array.
112
@c cc [x, y] := y / x;
119
(%i1) cc [x, y] := y / x;
131
(%i4) arrayinfo (cc);
132
(%o4) [hashed, 2, [4, z], [u, v]]
133
(%i5) listarray (cc);
139
@code{arrayinfo} y @code{listarray} aplicadas a una funci@'on subindicada.
142
@c dd [x] (y) := y ^ x;
149
(%i1) dd [x] (y) := y ^ x;
155
(%o2) lambda([y], y )
158
(%o3) lambda([y], y )
159
(%i4) arrayinfo (dd);
160
(%o4) [hashed, 1, [b + a], [v - u]]
161
(%i5) listarray (dd);
163
(%o5) [lambda([y], y ), lambda([y], y )]
168
@deffn {Funci@'on} arraymake (@var{name}, [@var{i_1}, ..., @var{i_n}])
169
Devuelve la expresi@'on @code{@var{name} [@var{i_1}, ..., @var{i_n}]}.
171
Esta funci@'on es similar a @code{funmake}, excepto que el valor retornado es referencia a un array no evaluado, en lugar de una llamada a una funci@'on no evaluada.
175
@defvr {Variable del sistema} arrays
176
Valor por defecto: @code{[]}
177
La variable @code{arrays} es una lista con todos los arrays que han sido alojados,
178
lo que comprende a los arrays declarados por @code{array}, a los
179
no declarados (@i{hashed arrays}) construidos impl@'{@dotless{i}}citamente
180
(asignando algo al elemento de un array) y a las funciones array definidas
181
mediante @code{:=} y @code{define}.
182
Los arrays definidos mediante @code{make_array} no se incluyen en
186
@code{array}, @code{arrayapply}, @code{arrayinfo}, @code{arraymake},
187
@code{fillarray}, @code{listarray} y @code{rearray}.
193
@c bb [FOO] : (a + b)^2;
195
@c dd : make_array ('any, 7);
199
(%i1) array (aa, 5, 7);
201
(%i2) bb [FOO] : (a + b)^2;
204
(%i3) cc [x] := x/100;
208
(%i4) dd : make_array ('any, 7);
209
(%o4) @{Array: #(NIL NIL NIL NIL NIL NIL NIL)@}
216
@deffn {Funci@'on} bashindices (@var{expr})
217
Transforma la expresi@'on @var{expr} d@'andole a cada suma y producto un @'unico @'{@dotless{i}}ndice. Esto le da a @code{changevar} mayor precisi@'on cuando opera con sumas y productos. La forma del @'unico @'{@dotless{i}}ndice es @code{j@var{number}}. La cantidad @var{number} se determina en funci@'on de @code{gensumnum}, valor que puede cambiar el usuario. Por ejemplo, haciendo @code{gensumnum:0$}.
221
@deffn {Funci@'on} fillarray (@var{A}, @var{B})
222
Rellena el array @var{A} con los valores de @var{B}, que puede ser una lista o array.
224
Si @var{A} es un array de n@'umeros decimales en coma flotante (enteros) entonces @var{B} debe ser o bien una lista de n@'umeros decimales en coma flotante (enteros), o bien otro array de n@'umeros en coma flotante (enteros).
226
Si las dimensiones de los areglos son diferentes, @var{A} se rellena seg@'un el orden de las filas. Si no hay suficientes elementos en @var{B} el @'ultimo elemento se utiliza para cubrir el resto de @var{A}. Si hay demasiados, los elementos sobrantes son ignorados.
228
La funci@'on @code{fillarray} devuelve su primer argumento.
233
@deffn {Funci@'on} listarray (@var{A})
234
Devuelve una lista con los elementos del array @var{A}.
235
El argumento @var{A} puede ser un array declarado o no declarado,
236
una funci@'on array o una funci@'on subindicada.
238
Los elementos se ordenan en primera instancia respecto del primer
239
@'{@dotless{i}}ndice, despu@'es respecto del segundo @'{@dotless{i}}ndice
240
y as@'{@dotless{i}} sucesivamente.
241
La ordenaci@'on de los @'{@dotless{i}}ndices es la misma que la
242
establecida por @code{orderless}.
244
En el caso de arrays no declarados, funciones array y funciones
245
subindicadas, los elementos corresponden a los @'{@dotless{i}}ndices
246
devueltos por @code{arrayinfo}.
248
Los elementos de los arrays declarados que no tienen valores asignados
249
(excepto @code{fixnum} y @code{flonum}) se devuelven como @code{#####}.
250
Los elementos sin valores asignados de los arrays @code{fixnum} y @code{flonum}
251
son devueltos como 0 y 0.0, respectivamente.
252
Los elementos sin valor asignado de los arrays no declarados,
253
funciones array y funciones subindicadas no son devueltos.
257
@code{listarray} y @code{arrayinfo} aplicadas a un array declarado.
267
(%i1) array (aa, 2, 3);
269
(%i2) aa [2, 3] : %pi;
271
(%i3) aa [1, 2] : %e;
273
(%i4) listarray (aa);
274
(%o4) [#####, #####, #####, #####, #####, #####, %e, #####,
275
#####, #####, #####, %pi]
276
(%i5) arrayinfo (aa);
277
(%o5) [declared, 2, [2, 3]]
280
@code{listarray} y @code{arrayinfo} aplicadas a un array no declarado (@i{hashed array}).
283
@c bb [FOO] : (a + b)^2;
284
@c bb [BAR] : (c - d)^3;
289
(%i1) bb [FOO] : (a + b)^2;
292
(%i2) bb [BAR] : (c - d)^3;
295
(%i3) listarray (bb);
297
(%o3) [(c - d) , (b + a) ]
298
(%i4) arrayinfo (bb);
299
(%o4) [hashed, 1, [BAR], [FOO]]
302
@code{listarray} y @code{arrayinfo} aplicadas a una funci@'on array.
305
@c cc [x, y] := y / x;
312
(%i1) cc [x, y] := y / x;
324
(%i4) listarray (cc);
328
(%i5) arrayinfo (cc);
329
(%o5) [hashed, 2, [4, z], [u, v]]
332
@code{listarray} y @code{arrayinfo} aplicadas a una funci@'on subindicada.
335
@c dd [x] (y) := y ^ x;
342
(%i1) dd [x] (y) := y ^ x;
348
(%o2) lambda([y], y )
351
(%o3) lambda([y], y )
352
(%i4) listarray (dd);
354
(%o4) [lambda([y], y ), lambda([y], y )]
355
(%i5) arrayinfo (dd);
356
(%o5) [hashed, 1, [b + a], [v - u]]
361
@deffn {Funci@'on} make_array (@var{tipo}, @var{dim_1}, ..., @var{dim_n})
362
Construye y devuelve un array de Lisp. El argumento @var{tipo} puede ser @code{any}, @code{flonum}, @code{fixnum}, @code{hashed} o @code{functional}. Hay @math{n} @'{@dotless{i}}ndices, y el @'{@dotless{i}}ndice @math{i}-@'esimo va de 0 a @math{@var{dim_i} - 1}.
364
La ventaja de @code{make_array} sobre @code{array} estriba en que el valor retornado no tiene nombre, y una vez que un puntero deja de referenciarlo, el valor desaparece. Por ejemplo, si @code{y: make_array (...)} entonces @code{y} apunta a un objeto que ocupa cierto espacio en la memoria, pero despu@'es de @code{y: false}, @code{y} ya no apunta al objeto, por lo que @'este puede ser considerado basura y posteriormente eliminado.
368
@c DOES THIS MODIFY A OR DOES IT CREATE A NEW ARRAY ??
369
@deffn {Funci@'on} rearray (@var{A}, @var{dim_1}, ..., @var{dim_n})
370
Cambia las dimensiones de un array. El nuevo array ser@'a rellenado con los elementos del viejo seg@'un el orden de las filas. Si el array antiguo era demasiado peque@~no, los elementos restantes se rellenan con @code{false}, @code{0.0} o @code{0}, dependiendo del tipo del array. El tipo del array no se puede cambiar.
374
@deffn {Funci@'on} remarray (@var{A_1}, ..., @var{A_n})
375
@deffnx {Funci@'on} remarray (all)
376
Borra los arrays y las funciones relacionadas con ellos, liberando el espacio de memoria ocupado.
377
Los argumentos pueden ser arrays declarados, arrays no declarados (@i{hashed arrays}),
378
funciones array y funciones subindicadas.
380
La llamada @code{remarray (all)} borra todos los elementos de la lista global @code{arrays}.
382
La funci@'on @code{remarray} devuelve la lista de los arrays borrados.
387
@deffn {Funci@'on} subvar (@var{x}, @var{i})
388
Eval@'ua la expresi@'on subindicada @code{@var{x}[@var{i}]}.
390
La funci@'on @code{subvar} eval@'ua sus argumentos.
392
La instrucci@'on @code{arraymake (@var{x}, [@var{i}]} construye la expresi@'on @code{@var{x}[@var{i}]},
401
@c foo : [aa, bb, cc, dd, ee]$
403
@c arraymake (x, [i]);
414
(%i4) foo : [aa, bb, cc, dd, ee]$
418
(%i6) arraymake (x, [i]);
428
@c THIS IS REALLY CONFUSING
429
@defvr {Variable opcional} use_fast_arrays
430
Valor por defecto: @code{false}
432
Si @code{use_fast_arrays} vale @code{true} entonces tan solo se reconocen dos tipos de arrays.
434
@c AQUI QUEDAN TRES PARRAFOS SIN TRADUCIR