Olá pessoal, vamos dar continuidade no aprendizado das listas, acredito que devemos falar um pouco mais sobre o layout de uma lista, ver mais alguns exemplos de listas complexas e explicar melhor o porquê escolhi determinado layout para a lista.
Vamos criar um exemplo um pouco mais complicado do que o exemplo da aula passada.
Exemplo:
Criarei uma lista que deve armazenar os seguintes dados.
1) O nome do bloco.
2) Seu ponto de Inserção.
3) Nome do layer, cor e tipo de linha.
4) Rotação do Bloco.
5) Escala X Y e Z.
Dependendo da quantidade de blocos de um desenho essa lista pode ser pequena ou enorme, para não dificultar muito vou criar um layout de lista contendo apenas 2 elementos, e ai vou explicar o motivo da escolha desse layout.
( ( “Cota” ( 10 20 0) (“Cota_Arvore” 7 “Continuos”) 63 ( 1 1 1) ) ( “Ponto” ( 100 205 0) (“Ponto_Cotado” 1 “Continuos”) 0 ( 1 1 1) ) )
Ficou difícil de entender não é, para facilitar a visualização vou mostrar como essa lista é visualizada no Visual Lisp que é o editor de programas lisp do Autocad.
Essa é a janele Inspect do Visual lisp, aprenderemos a usar ela mais a frente no curso, agora não entrarei em maiores detalhes, o que nos interessa agora é entender o layout dessa lista.
Na parte de cima temos a lista completa, logo abaixo dela temos duas linhas uma começando com (0) e a outra com (1) , isso apenas indica o numero do elemento da lista, ou seja o primeiro item da lista é o item zero o segundo é o item 1, em Autolisp o identificador de item inicial é sempre o zero, então em uma lista com dois elementos teremos dois itens, o item zero e o item 1.
Em cada um desses itens temos outra lista, ou seja, temos uma lista principal e dentro dela temos duas outras listas contendo diversos tipos de dados ( números, strings e outras listas).
Mas porque eu organizei os dados desse jeito, a ideia é agrupar informações relevantes que facilite não só a manipulação desses dados como também o acesso a eles. Criei uma lista principal e para organizar os dados dentro dela eu criei uma lista contendo os dados do bloco (nome, ponto de inserção, os dados do layer, rotação e escalas do bloco), depois precisei pensar em como organizar esses dados, pensei então em criar uma lista contendo esses dados porem não poderia simplesmente criar uma lista simples com todos os dados jogados lá dentro de qualquer maneira, então resolvi organiza-los da seguinte forma, primeiro item dessa sub lista dentro da lista principal seria o nome do bloco em formato string (texto), as coordenadas X Y e Z foram organizadas dentro de outra lista, os dados do layer também foram organizados como uma lista contendo os dados do nome do layer em string, cor do layer como um numero inteiro e o tipo de linha como string, em seguida inseri a rotação como um numero inteiro e as escalas eu organizei em uma lista contendo os números inteiros das escalas em X Y e Z.
A ideia principal é deixar os dados organizados, quando formos manipular os dados dessa lista poderemos usar funções que aprenderemos que facilitarão quando precisarmos acessar os dados ou criar loopings com eles.
Criando listas
Para criar uma lista podemos fazer uso de duas técnicas, o comando list e o quote (‘) sinal de apostrofo.
Primeiro Método – LIST
Esse é o método que eu utilizo abaixo segue a sintaxe desse comando:
Sintaxe:
(list <item 1> <item 2> …)
Exemplos:
(setq lista (list 1 2 3 4 5))
Retornará o valor (1 2 3 4 5), uma lista contendo esses cinco elementos.
(setq lista (list "cota" (list 10 20 0)))
Retornara o valor (“Cota” (10 20 0)), uma lista contendo dois item , uma string e uma lista.
Veja como seria criar a lista do inicio desse post com o comando list:
(setq lista (list (list "Cota" (list 10 20 0) (list "Cota_Arvore" 7 "Continuos") 63 (list 1 1 1) ) (list "Ponto" (list 100 205 0) (list "Ponto_Cotado" 1 "Continuos") 0 (list 1 1 1))))
Complicado né, mas posso garantir que isso é treino, assista a vídeo aula que ficara mais claro como utilizar esse comando.
Segundo Método – ‘ (quote)
O segundo método é mais simples e faremos uso do sinal de apostrofo (‘) chamado de quote, quando utilizamos o quote montamos a lista da forma que quisermos da mesma forma como queremos que ela seja armazenada.
Exemplos:
(setq lista ‘(1 2 3 4 5))
Retornará o valor (1 2 3 4 5), uma lista contendo esses cinco elementos.
(setq lista ‘("cota" (list 10 20 0))
Retornará o valor (“Cota” (10 20 0)), uma lista contendo dois item , uma string e uma lista. Note que o valor retornado é idêntico ao que foi escrito acima.
Veja como seria criar a lista do inicio desse post com o quote:
(setq a '(("Cota" ( 10 20 0) ("Cota_Arvore" 7 "Continuos") 63 ( 1 1 1) ) ("Ponto" ( 100 205 0) ("Ponto_Cotado" 1 "Continuos") 0 ( 1 1 1))))
Facilita bastante pois o quote retornara uma lista idêntica ao que foi feito, no caso do list o resultado é o mesmo porem um pouco mais complicado. Mas nem sempre poderemos usar o quote para a criação de listas, por esse motivo eu sempre utilizo o comando list.
Vamos ver mais alguns exemplo usando os dois métodos, agora vamos criar algumas variáveis antes e usa-las para criar as listas e ai você entenderá porque o quote nem sempre é a melhor opção.
Variáveis
(setq nome “Carlos”)
(setq num1 10)
(setq num2 20)
(setq num3 30)
(setq lista1 (list 1 2 3 4 5))
Exemplo 1 :
Com list
(setq lista (list num1 num2))
Retornará (10 20)
Com quote
(setq lista ‘(num1 num2))
Retornará (num1 num2)
Veja o exemplo acima, você pensou que o quote retornaria o mesmo valor que o list, porem não podemos utilizar o quote quando precisamos criar uma lista usando o valor de uma variável, quando utilizamos o quote ele apenas retorna o nome da variável sem o seu valor.
Exemplo 2 :
Com list
(setq lista (list (list num1 num2) lista1))
Retornará ( (10 20) (1 2 3 4 5) )
Com Quote
(setq lista ‘(( num1 num2) lista1))
Retornará ((num1 num2)(lista))
Exemplo 3:
Com list
(setq lista (List (list num1 num2 (list num3)) (list lista1)))
Retornará ( ( 10 20 (30) ) ( ( 1 2 3 4 5 ) ) )
Com quote
(setq lista ‘((num1 num2 (num3)) (lista1)))
Retornará ((num1 num2 (num3)) (lista1)))
O quote pareceu muito pratico na criação de listas mas não serve quando o assunto é variável, como em Autolisp tudo gira em torno de variável fica muito difícil utiliza o quote, isso não quer dizer que não o utilizaremos no futuro, mas aconselho nesse inicio do curso aprender a criar listas usando somente o comando list.
Aprendemos a criar listas, na próxima aula aprenderemos como manipular os dados de uma lista.
Exercícios:
1) Usando apenas o comando list crie as listas abaixo e armazene o seu resultado em uma variável qualquer.
a) ( ( 1 2 3 4 5) (“a” “b” “c” “d” “e”) )
B) ( ( ( 1 2 3) (4 5 6) ) ( ( “a” “b” “c”) (“d” “e” “f”) ) )
C) (“a” (“b”) “c” 1 (2) 3 (4))
d) ( ( “casa” (“armário” “mesa” “cadeira) ) (“escritório” (“computador” “servidor”) ) )
2) Usando o quote cria as listas abaixo
a) ( ( 1 2 3 4 5) (“a” “b” “c” “d” “e”) )
B) ( ( ( 1 2 3) (4 5 6) ) ( ( “a” “b” “c”) (“d” “e” “f”) ) )
C) (“a” (“b”) “c” 1 (2) 3 (4))
d) ( ( “casa” (“armário” “mesa” “cadeira) ) (“escritório” (“computador” “servidor”) ) )
3) Crie as variáveis abaixo em seguida crie as listas da forma que foi solicitada, execute esse exercício usando o comando list.
Variáveis
(setq a 1)
(setq b 10)
(setq c 100)
(setq nome “Carlos”)
(setq casa “Cadeira”)
(setq quarto “Cama”)
a) ( ( 1 100) ( 10 “Cadeira”))
B) ( (1) (10) (100) ( ( “Cadeira”) ) )
C) ( ( (“Cadeira” 100 (10) ) (“Carlos” 1 (100) ) ) “Cama” )
Assista também a essa aula em nosso canal Manual de Cad no Youtube.
Sérgio Fernandes
Manual de Cad
Nenhum comentário:
Postar um comentário