Olá Pessoal, neste post irei continuar falando sobre funções que manipulam listas. No post passado, falei como criar listas e como obter um elemento de uma posição da lista. Neste post, irei falar como adicionar elementos numa lista existente, como trocar elementos e como saber a quantidade de elementos numa lista qualquer.
Quantidade de elementos em uma lista
Através da função length seguido pelo nome da lista, podemos descobrir quantos elementos existem nesta lista. OBS: cada sub lista é considerada um elemento da lista.
Exemplos:
- (length (list))
retorna 0
- (length (list 1 2 3))
retorna 3
- criando uma lista na variável a1: (setq a1 (list "teste" (list (list 1 2 3) 10)))
criada a lista: ("teste" ((1 2 3) 10))
verificando o tamanho da lista contida em a1: (length a1)
retorna 2
Adicionando elementos em uma lista existente
1 - Função CONS
A função cons permite adicionar um átomo ou uma sub lista como um novo elemento de uma lista. A sua sintaxe é a seguinte: (cons NovoItem ListaA), onde NovoItem é um átomo ou uma lista, e ListaA é a lista no qual receberá o novo elemento. OBS: só é possível adicionar um novo elemento de cada vez na lista, e este elemento será posicionado na primeira posição da lista existente.
Exemplos:
- adicionando o átomo 15 na lista (5 10): (cons 15 (list 5 10))
retorna a nova lista: (15 5 10)
- adicionando a sub lista (1 2) na lista (3 4): (cons (list 1 2) (list 3 4))
retorna a lista: ((1 2) 3 4)
- adicionando o átomo "teste" na lista vazia (): (cons "teste" (list))
retorna a lista: ("teste")
OBS2: a função cons também é utilizada para construirmos um tipo de lista especial (list association) que contém 2 pares (o primeiro elemento funciona como um cabeçalho e o segundo elemento é associado a este cabeçalho). Este tipo de estrutura é muito utilizado em entidades do AutoCAD, quando se manipula em AutoLISP. Num post futuro irei falar sobre este tipo de estrutura.
2 - Função APPEND
A função append, é um pouco parecida com a função cons, porém a forma que ela funciona é um pouco diferente. Nesta função, o objetivo é anexar alguma lista numa outra lista. A sintaxe da função é a seguinte: (append (lista1) (lista2) (lista3) ... ) , assim pode-se juntar N-listas em uma única lista.
Exemplos:
- juntando a lista (10 20) com a lista (30 40): (append (list 10 20) (list 30 40))
retorna a lista: (10 20 30 40)
- criando uma lista na variável teste: (setq teste (list 1 2 3))
anexando no ínicio da lista teste, os elementos -1 e 0: (append (list -1 0) teste)
retorna a lista: (-1 0 1 2 3)
- anexando no final da lista ("abc" "def") a sub lista ("123" "456"): (append (list "abc" "def") (list (list "123" "456")))
retorna a lista: ("abc" "def" ("123" "456"))
Substituindo elementos em uma lista
Utilizando a função subst, podemos trocar um elemento de uma lista por outro. A sintaxe da função é a seguinte: (subst NovoElemento VelhoElemento Lista) , onde NovoElemento pode ser um átomo ou uma lista e VelhoElemento deve ser um item existente na Lista. OBS: caso o velho elemento definido não exista dentro da Lista, então nada será substituído, e será retornado a lista original. E se existir mais de uma vez o velho elemento, então todos estes elementos repetidos serão trocados pelo novo elemento na lista
Exemplos:
- substituindo o átomo "dois" pelo átomo 2 na lista (1 "dois" 3): (subst 2 "dois" (list 1 "dois" 3))
retorna: (1 2 3)
- substituindo o átomo 1 pelo átomo "troca" na lista (1 1 2 1 3 1 4): (subst "troca" 1 (list 1 1 2 1 3 1 4))
retorna: ("troca" "troca" 2 "troca" 3 "troca" 4)
- troca cada átomo 1 por 10 na lista (10 20 30): (subst 10 1 (list 10 20 30))
retorna a mesma lista, pois não houve troca: (10 20 30)
- substituindo a sub lista (1 2) pelo átomo 12 na lista ((1 2) 3 4): (subst 12 (list 1 2) (list (list 1 2) 3 4))
retorna a lista: (12 3 4)
- utilizando a função subst em conjunto com a função nth; Dado a variável teste, que contém a lista (1 2 3 4), substituir o segundo elemento da lista por "num2":
criando a lista: (setq teste (list 1 2 3 4))
substituindo o segundo elemento da lista: (subst "num2" (nth 1 teste) teste)
retorna a lista: (1 "num2" 3 4)
Bom, assim termino esta pequena introdução sobre listas. Vocês devem ter notado, que não falei, de nenhuma função que deleta itens de forma direta da lista. Isto devido ao simples fato de que não existe (ou eu não conheço?), mas o leitor não precisa ficar assustado, pois existe funções em ActiveX, que permitem fazer esta operação comum. Como considero o assunto sobre ActiveX, um pouco mais avançado, não irei falar sobre estas funções neste momento.
No próximo post, eu irei falar sobre operadores de comparação e operadores lógicos, para introduzir o assunto do post seguinte, que é funções de repetição. Até lá, pessoal!