Próximo: , Anterior:   [Conteúdo][Índice]

37, Listas


Próximo: , Anterior: , Acima: Listas   [Conteúdo][Índice]

37.1, Introdução a Listas

Listas são o bloco básico de construção para Maxima e Lisp.**Todos os outros tipos de dado como arrays, tabelas desordenadas, números são representados como listas Lisp. Essas listas Lisp possuem a forma

((MPLUS) $A 2)

para indicar a expressão a+2.**No nível um do Maxima poderemos ver a notação infixa a+2.**Maxima também tem listas que foram impressas como

[1, 2, 7, x+y]

para uma lista com 4 elementos.**Internamente isso corresponde a uma lista Lisp da forma

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

O sinalizador que denota o tipo campo de uma expressão Maxima é uma lista em si mesmo, após ter sido adicionado o simplificador a lista poderá transforma-se

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

Anterior: , Acima: Listas   [Conteúdo][Índice]

37.2, Definições para Listas

Função: append (list_1, ..., list_n)

Retorna uma lista simples dos elementos de list_1 seguidos pelos elementos de list_2, .... append também trabalha sobre expressões gerais, e.g. append (f(a,b), f(c,d,e)); retorna f(a,b,c,d,e).

Faça example(append); para um exemplo.

Função: assoc (key, list, default)
Função: assoc (key, list)

Essa função procura pela chave key do lado esquerdo da entrada list que é da forma [x,y,z,...] onde cada elemento de list é uma expressão de um operando binário e 2 elementos. Por exemplo x=1, 2^3, [a,b] etc. A chave key é verificada contra o primeiro operando. assoc retorna o segundo operando se key for achada. Se a chave key não for achada isso retorna o valor padrão default. default é opcional e o padrão é false.

Função: atom (expr)

Retorna true se expr for atomica (i.e. um número, nome ou sequência de caracteres) de outra forma retorna false. Desse modo atom(5) é true enquanto atom(a[1]) e atom(sin(x)) São false (assumindo a[1] e x não estão associados).

Função: cons (expr, list)

Retorna uma nova lista construída do elemento expr como seu primeiro elemento, seguido por elementos de list. cons também trabalha sobre outras expressões, e.g. cons(x, f(a,b,c)); -> f(x,a,b,c).

Função: copylist (list)

Retorna uma cópia da lista list.

Função: create_list (form, x_1, list_1, ..., x_n, list_n)

Cria uma lista por avaliação de form com x_1 associando a cada elemento list_1, e para cada tal associação anexa x_2 para cada elemento de list_2, .... O número de elementos no resultado será o produto do número de elementos de cada lista. Cada variável x_i pode actualmente ser um síbolo –o qual não pode ser avaliado. A lista de argumentos será avaliada uma única vez no início do bloco de repetição.

(%i82) create_list1(x^i,i,[1,3,7]);
(%o82) [x,x^3,x^7]

Com um bloco de repetição duplo:

(%i79) create_list([i,j],i,[a,b],j,[e,f,h]);
(%o79) [[a,e],[a,f],[a,h],[b,e],[b,f],[b,h]]

Em lugar de list_i dois argumentos podem ser fornecidos cada um dos quais será avaliado como um número. Esses podem vir a ser inclusive o limite inferior e superior do bloco de repetição.

(%i81) create_list([i,j],i,[1,2,3],j,1,i);
(%o81) [[1,1],[2,1],[2,2],[3,1],[3,2],[3,3]]

Note que os limites ou lista para a variável j podem depender do valor corrente de i.

Função: delete (expr_1, expr_2)
Função: delete (expr_1, expr_2, n)

Remove todas as ocorrências de expr_1 em expr_2. expr_1 pode ser uma parcela de expr_2 (se isso for uma adição) ou um factor de expr_2 (se isso for um produto).

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

delete(expr_1, expr_2, n) remove as primeiras n ocorrências de expr_1 em expr_2. Se houver menos que n ocorrências de expr_1 em expr_2 então todas as corrências seram excluídas.

(%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)

Função: eighth (expr)

Retorna o oitavo item de uma expressão ou lista expr. Veja first para maiores detalhes.

Função: endcons (expr, list)

Retorna uma nova lista consistindo de elementos de list seguidos por expr. endcons também trabalha sobre expressões gerais, e.g. endcons(x, f(a,b,c)); -> f(a,b,c,x).

Função: fifth (expr)

Retorna o quinto item da expressão ou lista expr. Veja first para maiores detalhes.

Função: first (expr)

Retorna a primeira parte de expr que pode resultar no primeiro elemento de uma lista, a primeira linha de uma matriz, a primeira parcela de uma adição, etc. Note que first e suas funções relacionadas, rest e last, trabalham sobre a forma de expr que é mostrada não da forma que é digitada na entrada. Se a variável inflag é escolhida para true todavia, essa funções olharão na forma interna de expr. Note que o simplificador re-ordena expressões. Desse modo first(x+y) será x se inflag for true e y se inflag for false (first(y+x) fornece os mesmos resultados). As funções second .. tenth retornam da segunda até a décima parte do seu argumento.

Função: fourth (expr)

Retorna o quarto item da expressão ou lista expr. Veja first para maiores detalhes.

Função: get (a, i)

Recupera a propriedade de utilizador indicada por i associada com o átomo a ou retorna false se "a" não tem a propriedade i.

get avalia seus 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]]

Função: join (l, m)

Cria uma nova lista contendo os elementos das lista l e m, intercaladas. O resultado tem os elementos [l[1], m[1], l[2], m[2], ...]. As listas l e m podem conter qualquer tipo de elementos.

Se as listas forem de diferentes comprimentos, join ignora elementos da lista mais longa.

Maxima reclama se L_1 ou L_2 não for uma lista.

Exemplos:

(%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]
Função: last (expr)

Retorna a última parte (parcela, linha, elemento, etc.) de expr.

Função: length (expr)

Retorna (por padrão) o número de partes na forma externa (mostrada) de expr. Para listas isso é o número de elementos, para matrizes isso é o número de linhas, e para adições isso é o número de parcelas (veja dispform).

O comando length é afectado pelo comutador inflag. Então, e.g. length(a/(b*c)); retorna 2 se inflag for false (Assumindo exptdispflag sendo true), mas 3 se inflag for true (A representação interna é essencialmente a*b^-1*c^-1).

Variável de opção: listarith

Valor por omissão: true - se false faz com que quaisquer operações aritméticas com listas sejam suprimidas; quando true, operações lista-matriz são contagiosas fazendo com que listas sejam convertidas para matrizes retornando um resultado que é sempre uma matriz. Todavia, operações lista-lista podem retornar listas.

Função: listp (expr)

Retorna true se expr for uma lista de outra forma retorna false.

Função: makelist (expr, i, i_0, i_1)
Função: makelist (expr, x, list)

Constrói e retorna uma lista, cada elemento dessa lista é gerado usando expr.

makelist (expr, i, i_0, i_1) retorna uma lista, o j’ésimo elemento dessa lista é igual a ev (expr, i=j) para j variando de i_0 até i_1.

makelist (expr, x, list) retorna uma lista, o j’ésimo elemento é igual a ev (expr, x=list[j]) para j variando de 1 até length (list).

Exemplos:

(%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]

Função: member (expr_1, expr_2)

Retorna true se is(expr_1 = a) para algum elemento a em args(expr_2), de outra forma retorna false.

expr_2 é tipicamente uma lista, nesse caso args(expr_2) = expr_2 e is(expr_1 = a) para algum elemento a em expr_2 é o teste.

member não inspeciona partes dos argumentos de expr_2, então member pode retornar false mesmo se expr_1 for uma parte de algum argumento de expr_2.

Veja também elementp.

Exemplos:

(%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
Função: ninth (expr)

Retorna o nono item da expressão ou lista expr. Veja first para maiores detalhes.

Função: rest (expr, n)
Função: rest (expr)

Retorna expr com seus primeiros n elementos removidos se n for positivo e seus últimos - n elementos removidos se n for negativo. Se n for 1 isso pode ser omitido. expr pode ser uma lista, matriz, ou outra expressão.

Função: reverse (list)

Ordem reversa para os membros de list (não os membros em si mesmos). reverse também trabalha sobre expressões gerais, e.g. reverse(a=b); fornece b=a.

Função: second (expr)

Retorna o segundo item da expressão ou lista expr. Veja first para maiores detalhes.

Função: seventh (expr)

Retorna o sétimo item da expressão ou lista expr. Veja first para maiores detalhes.

Função: sixth (expr)

Retorna o sexto item da expressão ou lista expr. Veja first para maiores detalhes.

Função: sublist_indices (L, P)

Retorna os índices dos elementos x da lista L para os quais o predicado maybe(P(x)) retornar true; isso inclui unknown bem como false. P pode ser um nome de função ou uma expressão lambda. L deve ser uma lista literal.

Exemplos:

(%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]
Função: tenth (expr)

Retorna o décimo item da expressão ou lista expr. Veja first para maiores detalhes.

Função: third (expr)

Retorna o terceiro item da expressão ou lista expr. Veja first para maiores detalhes.


Próximo: , Anterior:   [Conteúdo][Índice]