# Listas

## Crear

makelist(a[n], n,1,5);

makelist(n^2, n,1,5);
    
makelist(n^2, n,[1,0.5]);

Una sucesión recurrente, usando números decimales 

kill(all)$ 
numer:true$ 
        /* La fórmula de la sucesión recurrente*/
x[1]:(1/8)$ 
x[n]:= 1/8 +(x[n-1])^2$ 
        /* La lista de los 10 primeros términos */
makelist([n,x[n]],n,1,10);
        /* Volvemos al valor por defecto de number */
numer:false;

create_list(n^2,n,1,5);

create_list([n^2,m],n,1,3,m,[1,4,8]);
    
x(n):=1/n$ f(x):= x^2$ 
create_list([x(n),f(x(n))],n,1,10);

## Manipular

L : [1,5,b,[x,y],[x=2+z]];
L[3];
L[5];

first(L);
last(L);

flatten(L);
last(%);

Son formas de recuperar elementos de una lista o desagregar en sus componentes

append(L,[cos(x)]);
delete(b,%);

Añadir a la lista nuevos elementos o eliminar elementos de la lista

L1 : [a,b,c];
L2 : [x,y,z];
join(L1,L2);

Juntar listas

[1,x,3]+[2,y,z];

[1,x,3]*[2,y,z];

[1,x,3].[2,y,z];


apply("+",[1,x,3]);

print("El máximo es ", apply(max,[1,25,3]))$

print("El mínimo es ", apply(min,[1,25,3]))$


m:20$ 
lista : makelist( random(10.0), k, 1, m )$ 
print("La media de la lista aleatoria es: ", apply("+",lista)/length(lista))$

Sumas, multiplicaciones, máximos y mínimos, longitudes, promedios...

map(lambda([z],z^2),[1,x,3]);

Imagen de una lista haciendo uso de la función  lambda  
que es una "función virtual" definida sobre la marcha.

Incluso cosas más sofisticadas como gráficas de polinomios de Taylor:

1) elegimos una lista de grados
2) para la cual hallamos su "imagen" que son 
   los correspondientes polinomios de Taylor del seno para esa lista de grados
3) añadimos el seno a la lista de funciones anteriores
4) y, finalmente, los dibujamos todos juntos

grado : makelist(2*i+1,i,0,2); 
T : map(lambda([z], taylor(sin(u),u,0,z)),grado); 
G : append([sin(u)],T)$ 
wxplot2d(G,[u,-%pi,%pi]);