[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37. Listas


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.1 Introducción a las listas

Las listas son bloques de construcción básica para Maxima y Lisp. Todos los tipos de datos diferentes a los arreglos, tablas mixtas o números son representados como listas Lisp, estas listas Lisp tienen la forma

((MPLUS) $A 2)

para indicar la expresión a+2. Al nivel de Maxima se observará la notación infija a+2. Maxima también tiene listas con el formato

[1, 2, 7, x+y]

para una lista de 4 elementos. Internamente esto se corresponde con una lista Lisp de la forma

((MLIST) 1  2  7  ((MPLUS)  $X $Y ))

El elemento que denota el tipo de expresión en Maxima es también una lista, la cual tras ser analizada y simplificada tomará la forma

((MLIST SIMP) 1 2 7 ((MPLUS SIMP) $X $Y))

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.2 Funciones y variables para listas

Función: append (lista_1, ..., lista_n)

Devuelve una lista cuyos elementos son los de la lista lista_1 seguidos de los de lista_2, ... La función append también opera con expresiones generales, como la llamada append (f(a,b), f(c,d,e));, de la que se obtiene f(a,b,c,d,e).

Tecléese example(append); para ver un ejemplo.

Función: assoc (clave, lista, valor_por_defecto)
Function: assoc (clave, lista)

Esta función busca la clave en el lado derecho de la lista, la cual es de la forma [x,y,z,...], donde cada elemento es una expresión formada por un operador binario y dos elementos. Por ejemplo, x=1, 2^3, [a,b] etc. La clave se compara con el primer operando. La función assoc devuelve el segundo operando si se encuentra con que la clave coincide. Si la clave no coincide entonces devuelve el valor valor_por_defecto. El argumento valor_por_defecto es opcional; en caso de no estar presente, se devolverá false.

Función: atom (expr)

Devuelve true si expr es un átomo (número, nombre o cadena alfanumérica) y false en caso contario. Así, atom(5) devolverá true, mientras que atom(a[1]) y atom(sin(x)) darán como resultado false (dando por hecho que tanto a[1] como x no tienen valores asignados).

Función: cons (expr, lista)

Devuelve una nueva lista en la que el elemento expr ocupa la primera posición, seguido de los elementos de lista. La función cons también opera con otro tipo de expresiones, como cons(x, f(a,b,c)); -> f(x,a,b,c).

Función: copylist (lista)

Devuelve una copia de la lista.

Función: create_list (form, x_1, list_1, ..., x_n, list_n)

Crea una lista mediante la evaluación de form con x_1 tomando cada uno de los valores de list_1, para cada uno de estos valores liga x_2 con cada elemento de list_2, .... El número de elementos en el resultado será el producto del número de elementos en cada lista. Cada variable x_i debe ser un símbolo y no será evaluado. La lista de argumentos será evaluada una vez al comienzo de la iteración.

Por ejemplo:

(%i1) create_list(x^i,i,[1,3,7]);
                 3   7
(%o1)       [x, x , x ]

Con una doble iteración:

(%i1) create_list([i,j],i,[a,b],j,[e,f,h]);
(%o1) [[a, e], [a, f], [a, h], [b, e], [b, f], [b, h]]

En lugar de list_i se pueden suministrar dos argumentos cada uno de los cuales debería poder evaluarse a un número, los cuales serán los límites inferior y superior, ambos inclusive, para cada iteración.

Por ejemplo:

(%i1) create_list([i,j],i,[1,2,3],j,1,i);
(%o1) [[1, 1], [2, 1], [2, 2], [3, 1], [3, 2], [3, 3]]

Nótese que los límites o lista para la variable j pueden depender del valor actual de i.

Función: delete (expr_1, expr_2)
Función: delete (expr_1, expr_2, n)

Elimina las expresiones expr_1 de expr_2. La expresión expr_1 a eliminar puede ser un sumando de expr_2 (en caso de que ésta sea una suma) o un factor de expr_2 (si se trata de un producto).

(%i1) delete(sin(x), x+sin(x)+y);
(%o1)                         y + x

La llamada delete(expr_1, expr_2, n) elimina las primeras n apariciones de expr_1 en expr_2. En caso de que expr_1 aparezca menos de n veces dentro de la expresión de referencia expr_2 entonces se eliminan todas ellas.

(%i1) delete(a, f(a,b,c,d,a));
(%o1)                      f(b, c, d)
(%i2) delete(a, f(a,b,a,c,d,a), 2);
(%o2)                     f(b, c, d, a)
Función: eighth (expr)

Devuelve el octavo elemento de la lista o expresión expr. Véase first para más detalles.

Función: endcons (expr, lista)

Devuelve una nueva lista formada por los elementos de lista seguidos de los de expr. La función endcons también opera con expresiones generales, por ejemplo endcons(x, f(a,b,c)); -> f(a,b,c,x).

Función: fifth (expr)

Devuelve el quinto elemento de la lista o expresión expr. Véase first para más detalles.

Función: first (expr)

Devuelve la primera parte de expr, que puede consistir en el primer elemento de una lista, la primera fila de una matriz, el primer término de una suma, etc. Nótese que tanto first como sus funciones relacionadas, rest y last, operan sobre la forma en la que expr es mostrada por Maxima, no sobre la forma en la que es introducida la expresión. Sin embargo, cuando la variable inflag toma el valor true estas funciones tendrán en cuenta el formato interno de expr. Téngase en cuenta que el simplificador reordena las expresiones. Así, first(x+y) devolverá x si inflag vale true y y cuando inflag tome el valor false (first(y+x) devuelve el mismo resultado). Las funciones second ... tenth devuelven desde el segundo hasta el décimo elemento del argumento de entrada.

Función: fourth (expr)

Devuelve el cuarto elemento de la lista o expresión expr. Véase first para más detalles.

Función: get (a, i)

Recupera la propiedad de usuario indicada por i asociada al átomo a o devuelve false si a no tiene la propiedad i.

La función get evalúa sus argumentos.

(%i1) put (%e, 'transcendental, 'type);
(%o1)                    transcendental
(%i2) put (%pi, 'transcendental, 'type)$
(%i3) put (%i, 'algebraic, 'type)$
(%i4) typeof (expr) := block ([q],
        if numberp (expr)
        then return ('algebraic),
        if not atom (expr)
        then return (maplist ('typeof, expr)),
        q: get (expr, 'type),
        if q=false
        then errcatch (error(expr,"is not numeric.")) else q)$
(%i5) typeof (2*%e + x*%pi);
x is not numeric.
(%o5)  [[transcendental, []], [algebraic, transcendental]]
(%i6) typeof (2*%e + %pi);
(%o6)     [transcendental, [algebraic, transcendental]]

Función: join (l, m)

Crea una nueva lista con los elementos de las listas l y m alternados. El resultado tiene como elementos [l[1], m[1], l[2], m[2], ...]. Las listas l y m pueden contener cualquier tipo de elementos.

Si las listas son de diferente longitud, join ignora los elementos sobrantes de la lista más larga.

Maxima da error si o bien l o m no son listas.

Ejemplos:

(%i1) L1: [a, sin(b), c!, d - 1];
(%o1)                [a, sin(b), c!, d - 1]
(%i2) join (L1, [1, 2, 3, 4]);
(%o2)          [a, 1, sin(b), 2, c!, 3, d - 1, 4]
(%i3) join (L1, [aa, bb, cc, dd, ee, ff]);
(%o3)        [a, aa, sin(b), bb, c!, cc, d - 1, dd]
Función: last (expr)

Devuelve la última parte (término, fila, elemento, etc.) de expr.

Función: length (expr)

Devuelve (por defecto) el número de partes de que consta expr en la versión correspondiente a la que muestra. En el caso de listas, se devuelve el número de elementos, si se trata de matrices el número de filas y se se trata de sumas el número de términos o sumandos (véase dispform).

La función length se ve afectada por el valor de la variable inflag. Así, length(a/(b*c)); devuelve 2 si inflag vale false (dando por hecho que exptdispflag vale true), pero devuelve 3 si inflag vale true (ya que la representación interna es a*b^-1*c^-1).

Variable opcional: listarith

Valor por defecto: true

Cuando vale false provoca que no se realicen operaciones aritméticas con listas; cuando vale true, las operaciones con listas y matrices son contagiosas, en el sentido de que las listas se transforman en matrices, retornando resultados de este último tipo. Sin embargo, operaciones que involucren listas con listas devolverán también listas.

Función: listp (expr)

Devuelve el valor true si expr es una lista, y false en caso contrario.

Función: makelist (expr, i, i_0, i_1)
Función: makelist (expr, x, list)

Construye y devuelve una lista, siendo cada uno de sus elementos generados por expr.

La llamada makelist (expr, i, i_0, i_1) devuelve una lista cuyo j-ésimo elemento es igual a ev (expr, i=j), tomando j los valores enteros entre i_0 y i_1.

La llamada makelist (expr, x, list) devuelve una lista cuyo j-ésimo elemento es igual a ev (expr, x=list[j]), tomando j los valores enteros entre 1 through length (list).

Ejemplos:

(%i1) makelist(concat(x,i),i,1,6);
(%o1)               [x1, x2, x3, x4, x5, x6]
(%i2) makelist(x=y,y,[a,b,c]);
(%o2)                 [x = a, x = b, x = c]

Función: member (expr_1, expr_2)

Devuelve true si is(expr_1 = a) para algún elemento a de args(expr_2), en caso contrario devuelve false.

Normalmente, expr_2 será una lista, en cuyo caso args(expr_2) = expr_2, y la comprobación será si is(expr_1 = a) para algún elemento a de expr_2.

La función member no inspecciona las partes de los argumentos de expr_2, por lo que puede devolver false si expr_1 es parte de alguno de los argumentos de expr_2.

Véase también elementp.

Ejemplos:

(%i1) member (8, [8, 8.0, 8b0]);
(%o1)                         true
(%i2) member (8, [8.0, 8b0]);
(%o2)                         false
(%i3) member (b, [a, b, c]);
(%o3)                         true
(%i4) member (b, [[a, b], [b, c]]);
(%o4)                         false
(%i5) member ([b, c], [[a, b], [b, c]]);
(%o5)                         true
(%i6) F (1, 1/2, 1/4, 1/8);
                               1  1  1
(%o6)                     F(1, -, -, -)
                               2  4  8
(%i7) member (1/8, %);
(%o7)                         true
(%i8) member ("ab", ["aa", "ab", sin(1), a + b]);
(%o8)                         true
Función: ninth (expr)

Devuelve el noveno elemento de la lista o expresión expr. Véase first para más detalles.

Función: unique (L)

Devuelve la lista L sin redundancias, es decir, sin elementos repetidos

Cuando ninguno de los elementos de L está repetido, unique devuelve una réplica de L, no la propia L.

Si L no es una lista, unique devuelve L.

Ejemplo:

(%i1) unique ([1, %pi, a + b, 2, 1, %e, %pi, a + b, [1]]);
(%o1)              [1, 2, %e, %pi, [1], b + a]
Función: rest (expr, n)
Función: rest (expr)

Devuelve expr sin sus primeros n elementos si n es positivo, o sus últimos - n elementos si n es negativo. En caso de que n tome el valor 1 puede ser omitido. La expresión expr puede ser una lista, una matriz o cualquier otra expresión.

Función: reverse (lista)

Invierte el orden de los elementos de la lista (no los propios elementos). La función reverse también opera sobre expresiones generales, como en reverse(a=b); gives b=a.

Función: second (expr)

Devuelve el segundo elemento de la lista o expresión expr. Véase first para más detalles.

Función: seventh (expr)

Devuelve el séptimo elemento de la lista o expresión expr. Véase first para más detalles.

Función: sixth (expr)

Devuelve el sexto elemento de la lista o expresión expr. Véase first para más detalles.

Función: sublist_indices (L, P)

Devuelve los índices de los elementos x de la lista L para la cual el predicado maybe(P(x)) devuelve true, lo que excluye a unknown y a false. P puede ser el nombre de una función o de una expresión lambda. L debe ser una lista literal.

Ejemplos:

(%i1) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b],
                    lambda ([x], x='b));
(%o1)                     [2, 3, 7, 9]
(%i2) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b],
                    symbolp);
(%o2)                  [1, 2, 3, 4, 7, 9]
(%i3) sublist_indices ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0],
                    identity);
(%o3)                       [1, 4, 5]
(%i4) assume (x < -1);
(%o4)                       [x < - 1]
(%i5) map (maybe, [x > 0, x < 0, x < -2]);
(%o5)                [false, true, unknown]
(%i6) sublist_indices ([x > 0, x < 0, x < -2], identity);
(%o6)                          [2]
Función: tenth (expr)

Devuelve el décimo elemento de la lista o expresión expr. Véase first para más detalles.

Función: third (expr)

Devuelve el tercer elemento de la lista o expresión expr. Véase first para más detalles.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Robert Dodier on diciembre, 22 2007 using texi2html 1.76.