terça-feira, 17 de fevereiro de 2015

Aula 8–Manipulando Listas- Parte 2

 

Olá Pessoal, vamos dar continuidade à aula de manipulação de listas, hoje aprenderemos novas funções de manipulação de listas que em conjunto com o CAR e o CDR nos permitem conseguir qualquer valor dentro de uma lista de forma bem fácil.

Função REVERSE

A função reverse inverte uma lista

Sintaxe:

(reverse <lista>)

Exemplo 1:

(setq lista (list 1 2 3 4 5))

Retornara a lista (1 2 3 4 5)

(setq inverso (reverse lista))

Retornará a lista invertida (5 4 3 2 1)

Exemplo 2:

(setq lista (list 1 2 3 (list 4 5 6)))

Retornara a lista (1 2 3 (4 5 6))

(setq inverso (reverse lista))

Retornará ((4 5 6) 3 2 1)

ATENÇÃO: A função reverse inverte os elementos da lista principal não invertendo os dados das sub-listas como no exemplo acima.

 

Função LAST

A função last pega o ultimo elemento de uma lista.

Sintaxe:

(last <lista>)

Exemplo:

(setq lista (list 1 2 3 4 5))

Retornara a lista (1 2 3 4 5)

(setq ultimo (last lista))

Retornará 5 que é o ultimo elemento da lista.

 

Função Length

Retorna o número de elementos de uma lista

Sintaxe:

(length <lista>)

Exemplo:

(setq lista (list 1 2 3 (list 4 5 6)))

Retornara a lista (1 2 3 (4 5 6))

(setq contagem (length lista))

Retornará 4 como sendo o número de itens dessa lista.

ATENÇÃO: Apesar de parecer que essa lista tem 6 elementos ela não tem, ela tem 3 números inteiros e uma lista, a função length não conta elementos dentro das sub-listas.

 

Função NTH

Retorna o elemento da lista que se encontra em determinada posição.

Antes de mostra a sintaxe e o exemplo de como funciona essa função precisamos entender uma coisa, o indexador, tudo em Autolisp quando o assunto é indexador precisamos sempre lembrar que o indexador inicial é sempre o zero, se, por exemplo, tivermos uma lista com cinco elementos o indexador do primeiro elemento será o zero e do ultimo elemento será 4.

Sintaxe:

(nth <indexador> <lista>)

Exemplo 1:

(setq lista (list 1 2 3 (list 4 5 6)))

Retornara a lista (1 2 3 (4 5 6))

(setq valor (nth 2 lista))

Retornara o valor 3 que é o elemento referente ao indexador 2.

Exemplo 2:

(setq valor (nth 3 lista))

Retornará o valor (4 5 6) que é o elemento referente ao indexador 3.

Exemplo 3:

(setq valor (nth 1 (nth 3 lista)))

Retornará o valor 5, vamos entender a linha de programação desse exemplo, primeiro devemos interpretar (nth 3 lista) que retornara (4 5 6), depois falamos para pegar o indexador 1 desse resultado na lista (4 5 6) o indexador 1 é referente ao valor 5.

 

Função APPEND

A função append junta as listas fornecidas.

Sintaxe:

(append <lista1> <lista2> . . .)

Exemplo 1:

(setq lista1 (list 1 2 3 4 5))

Retornará (1 2 3 4 5)

(setq lista2 (list “a” “b” “c”))

Retornará (“a” “b” “c”)

(setq lista_nova (append lista1 lista2))

Retornara (1 2 3 4 5 ”a” “b” “c”)

Exemplo 2:

(setq lista1 (list 1 2 3 4 5))

Retornará (1 2 3 4 5)

(setq lista2 (list “a” “b” “c”))

Retornará (“a” “b” “c”)

(setq lista_nova (append lista2 lista1)); Note que inverti a ordem das listas nesse exemplo

Retornara (”a” “b” “c” 1 2 3 4 5)

Nesse exemplo podemos notar que a ordem das listas na função append pode modificar o layout final da lista.

Voltaremos a falar sobre essa função mais a frente, pois quando estivermos falando sobre loopings precisaremos dar uma revisada nessa função.

 

Função MEMBER

A função member verifica se um determinado elemento esta contido dentro da lista. Caso a função member encontre o item dentro da lista ele retornara o restante da lista a partir do item encontrado, caso ele não encontre o item ele retornara NIL.

Sintaxe:

(member <elemento> <lista>)

Exemplo 1:

(setq lista (list 1 2 3 (list 4 5 6)))

Retornara a lista (1 2 3 (4 5 6))

(setq localiza (member 3 lista))

Retornara (3 (4 5 6)) que é o restante da lista a partir do elemento encontrado

Exemplo 2:

(setq lista (list 1 2 3 (list 4 5 6)))

Retornara a lista (1 2 3 (4 5 6))

(setq localiza (member 4 lista))

Retornará nil, isso mesmo nil, mesmo o elemento 4 existindo na lista. Isso acontece porque a função member realiza a pesquisa apenas na lista principal não estendendo a busca as sub-listas e é exatamente o nosso caso pois o número 4 encontra-se dentro de outra lista.

Exemplo 3:

(setq lista (list 1 2 3 (list 4 5 6)))

Retornara a lista (1 2 3 (4 5 6))

(setq localiza (member (list 4 5 6) lista))

Retornara ((4 5 6)), ele retornou a lista principal com o restante da lista a partir do item encontrado por isso teremos uma lista dentro da outra.

Espero que tenham gostado na próxima aula faremos os nosso primeiros programas criaremos os nosso primeiros comandos.

 

Exercicios

1) Monte a lista abaixo em seguida execute as manipulações conforme solicitado.

( 1 2 3 4 5 (“a” “b” “c”) 5 6 7 8 9 10 (( “mario” “amanda” “carlos”) 20 25 30))

Monte as seguintes linhas de programação, sempre guardando o resultado delas em alguma variável de sua escolha:

a) Informe o número de itens da lista

b) Pegue o quinto elemento da lista

c) Verifique se o elemento 10 existe dentro da lista

d) Pegue o ultimo elemento da lista

e) Inverta lista

f) Crie a seguinte lista (“pato” “macaco” 12) e adicione-a a lista

g) Usando apenas duas funções de manipulação e sem usar a função last pegue o ultimo elemento da lista

h) Usando apenas dois comandos de manipulação de listas pegue o valor “b” da lista, não pode utilizar nem CAR nem CDR nem nenhuma fusão deles.

i) Usando apenas duas funções de manipulação e sem usar a função last e sem usar as funções que usou no exercício G pegue o ultimo elemento da lista

j) Usando no máximo 3 comandos de manipulação diferentes extraia o valor “mario” da lista, não pode utilizar nem CAR nem CDR nem nenhuma fusão deles.

Espero que tenham gostado.

Assista também a essa aula em nosso canal Manual de Cad no Youtube.

https://www.youtube.com/watch?v=WItCIiHg7rI&feature=youtu.be

Sérgio Fernandes

Manual de Cad

Nenhum comentário:

Postar um comentário