Elementos de Programação (LEGI)
Aula Teórica 4: Listas
António Ravara
Secção de Lógica e Computação, Departamento de Matemática
Instituto Superior Técnico
Notas baseadas na bibliografia básica da cadeira
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.1
Listas
As listas são o único tipo de dados estruturado
disponível no Mathematica
Uma lista é
1. uma sequência (ordenada) de valores arbitrários,
2. eventualmente heterogénea,
3. possivelmente com repetições
Exemplo
Seja l = {3, T RUE , {2, x}, “xpto”}.
1. H EAD [l] −→ L IST
2. F ULL F ORM [l] −→ L IST[3, T RUE , {2, x}, “xpto”]
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.2
Construção de Listas
Há 3 formas de definir
1. em extensão
enumeram-se os elementos entre chavetas
2. em compreensão
dá-se uma regra (expressão) para “gerar” os
elementos
avaliação da expressão dá a lista
3. por construção
usando operações do Mathematica que manipulam
listas
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.3
Definição de Listas — 1
Em extensão
Enumeram-se os elementos entre chavetas
constante básica: {} (lista vazia)
Exemplo:
{3, T RUE , {2, x}, “xpto”}
Não se adequa a listas muito grandes ou que sejam
resultado de cálculo
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.4
Definição de Listas — 2
Em compreensão
Dá-se uma regra para “gerar” os elementos
TABLE [expr, {var, valinf, valsup, incr}]
Avaliação da expressão dá a lista
Exemplos:
TABLE[ai, {i, 0, 5, 2}] −→ {0, 2a, 4a}
TABLE[ai, {i, 4}] −→ {a, 2a, 3a, 4a}
Gera os elementos todos de uma vez
Nem todas as listas são geráveis por regras
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.5
Definição de Listas — 3
Por construção
Com operações do Mathematica que manipulam listas
Construtoras
Argumentos são listas e/ou (outros) valores
Resultados são listas
(contradomínio é do tipo L IST)
Auxiliares
Manipulam listas
(alteram ou dão informação sobre listas)
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.6
Listas por construção — 1
Operações construtoras
Operação (constante) básica: {} (−→ L IST)
Operações que colocam elementos numa lista
L IST × Valor −→ L IST
sendo Valor um tipo arbitrário do Mathematica
A PPEND [l, expr] (P REPEND [l, expr])
devolve a lista formada pela lista argumento com o
valor de expr no final (início)
Exemplo: A PPEND [{3, 2}, 2 − 1] −→ {3, 2, 1}
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.7
Listas por construção — 2
Operações construtoras
(mais) operações que colocam elementos numa lista
I NSERT [l, expr1 , expr2 ]
devolve a lista formada pela lista argumento com o
valor de expr 1 na posição resultante de avaliar expr 2
expr 2 deve ser um inteiro (se negativo, conta-se a
posição a partir do fim da lista)
R EPLACE PART [l, expr1 , expr2 ]
devolve a lista formada pela lista argumento com o
elemento na posição resultante de avaliar expr 2
substituido pelo resultado de avaliar expr 1
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.8
Listas por construção — 3
(algumas) Operações auxiliares
1. Operações que devolvem (sub)listas
(ver no Mathematica a sua forma mais geral)
D ROP[l, n]
devolve a lista formada pela lista argumento sem os n
primeiros elementos
(sem os últimos n, se n for negativo)
TAKE[l, n]
devolve a lista formada pelos n primeiros elementos
da lista argumento
(com os últimos n, se n for negativo)
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.9
Listas por construção — 4
Operações auxiliares
1. (mais) operações que devolvem sublistas das originais
D ELETE [l, n]
devolve a lista formada pela lista argumento sem o
n-ésimo elemento
(contando n a partir do fim da lista, se n for negativo)
R EST[l]
devolve a lista formada pela lista argumento sem o
primeiro elemento
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.10
Listas por construção — 5
Operações auxiliares
1. (ainda mais) operações que devolvem listas
S ORT[l]
devolve a lista resultante de ordenar a lista argumento
S ELECT [l, predicado]
devolve a lista resultante de seleccionar na lista
argumento os valores que verificam o predicado
Exemplo: S ELECT [{1, 2, 3}, O DD Q] −→ {1, 3}
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.11
Listas por construção — 6
Operações auxiliares
1. (ainda mais) operações que devolvem listas
J OIN[l, l′ ]
concatena duas listas
l[[l′ ]]
devolve a lista formada pelos elementos da lista l nas
posições dadas pelos elementos da lista l′
Exemplo: {4, 5, 6}[[{1, 3}]] −→ {4, 6}
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.12
Listas por construção — 7
(mais) Operações auxiliares
2. Operações que dão acesso a elementos de listas
F IRST [l]
devolve o primeiro elemento da lista argumento
L AST[l]
devolve o último elemento da lista argumento
l[[n]]
devolve o n-ésimo elemento da lista argumento
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.13
Listas por construção — 8
(mais) Operações auxiliares
3. Operações que dão informação sobre listas
L ENGHT [l]
devolve o número de elementos de uma lista
argumento (dito o seu comprimento)
M EMBER Q[l, expr]
predicado que verifica se um dado valor ocorre numa
dada lista
P OSITION[l, expr]
devolve a primeira posição de um dado valor na lista
argumento
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.14
Observações
Equivalências entre operações
Muitas das funções referidas atrás podem ser definidas à
custa de outras (nem todas são essenciais)
Exemplos:
R EST[l] ⇔ D ELETE [l, 1]
D ROP[l, −n] ⇔ TAKE [l, L ENGHT [l] − n]
Funções parciais
Muitas das funções referidas atrás não estão sempre
definidas (dão erro para alguns argumentos)
Exemplos: F IRST [{}] ou D ELETE [{1, 2, 3}, 4]
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.15
Exercícios
1. Defina uma função que conta o número de valores
pares de uma lista de inteiros
contapares = F UNCTION [l, L ENGTH [S ELECT [l, E VEN Q]]]
2. Defina uma função que conta o número de valores de
uma lista de inteiros que obedecem a determinado
critério
contaq = F UNCTION [{l, q}, L ENGTH [S ELECT [l, q]]]
3. Defina uma função que verifica se uma lista está
ordenada por ordem crescente
ordcresQ = F UNCTION [l, l == S ORT[l]]
Elementos de Programação (LEGI) Aula Teórica 4: Listas – p.16
Download

Elementos de Programação (LEGI) Aula Teórica 4: Listas