Você está aqui: Lisp ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como criar um array unidimensional em LISP preenchido com um determinado valor usando make-array e :initial-elementQuantidade de visualizações: 527 vezes |
Em algumas situações nós precisamos criar um vetor (um array unidimensional) na linguagem LISP e gostaríamos de preencher os seus elementos com o mesmo valor, ou seja, um array de 0s, 1s, -1s, etc. Para isso podemos combinar a função make-array e o argumento :initial-element. Veja um código LISP no qual criamos um array unidimensional de 10 elementos, todos preenchidos com o valor 3: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; vamos criar um array unidimensional contendo ; espaço para 10 elementos (let (numeros) ; agora que já declaramos o nome do array, ; vamos reservar espaço para os 10 elementos ; todos preenchidos com o valor 3 (setq numeros (make-array '(10) :initial-element 3)) ; vamos mostrar o array criado (format t "Os elementos do array são: ~D~%" numeros) ) Ao executar este código LISP nós teremos o seguinte resultado: Os elementos do array são: #(3 3 3 3 3 3 3 3 3 3) |
![]() |
Lisp ::: Fundamentos da Linguagem ::: Variáveis e Constantes |
Como declarar variáveis globais em Lisp usando as funções defvar e defparameterQuantidade de visualizações: 884 vezes |
Em algumas situações nós precisamos declarar variáveis globais em Lisp, ou melhor, em Common Lisp, que é a padronização da Lisp que adotamos para estas dicas. Variáveis globais em Common Lisp se comportam de forma idêntica àquelas de outras linguagens de programação, ou seja, possuem valores permanentes por todo o sistema Lisp e mantém seus valores até que novos valores são especificados. Se quisermos, por exemplo, a partir do corpo de uma função acessar uma variável fora dela, então esta variável deverá ser declarada globalmente. Em Common List nós podemos declarar variáveis globais usando as funções defvar e defparameter. Vamos ver exemplos envolvendo as duas e no final desta dica eu mostro a diferença. Veja um trecho de código Common Lisp na qual declaramos uma variável global chamada valor e a acessamos de dentro de uma função: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; vamos declarar uma variável global (defvar valor 10) ; vamos mostrar o valor atual da variável global (format t "O valor da variável global é ~D" valor) ; agora vamos acessar a variável global ; de dentro de uma função (defun ModificaValor() ; vamos alterar o valor da variável global (setq valor 50) ) ; chamamos a função ModificaValor (ModificaValor) ; e checamos se o valor da variável global foi ; mesmo alterado (terpri) (format t "O valor da variável global é ~D" valor) Ao executar este código Common List nós teremos o seguinte resultado: O valor da variável global é 10 O valor da variável global é 50 Veja agora um trecho de código Common Lisp no qual usamos a função defparameter para declarar e inicializar as variáveis globais: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; vamos declarar três variáveis globais (defparameter *a* 5) (defparameter *b* 3) (defparameter *soma* 0) ; agora vamos acessar as variáveis globais ; de dentro de uma função (defun Somar() ; vamos somar as duas variáveis globais ; e guardar o resultado em uma terceira ; variáveis global (setq *soma* (+ *a* *b*)) ) ; chamamos a função Somar (Somar) ; e mostramos o resultado da soma (format t "A soma das variáveis globais é ~D" *soma*) Ao executar este novo código Common Lisp nós teremos o seguinte resultado: A soma das variáveis globais é 8 Note que coloquei asteríscos (*) ao redor dos nomes das variáveis globais. Esta é uma prática comum entre programadores Lisp e altamente recomendado pelo comunidade, pois facilita a distinção entre variáveis globais e locais. Então, qual é a diferença entre defvar e defparameter? A primeira delas é que a função defparameter nos obriga a informar o valor inicial para a variável global, enquanto a função defvar não o faz. A segunda diferença é que, ao redefinirmos o valor de uma variável global usando defparameter, o valor armazenado anteriormente será sobreposto, enquanto a função defvar não altera o valor anterior. |
Lisp ::: Fundamentos da Linguagem ::: Variáveis e Constantes |
Como declarar variáveis locais em Lisp usando o comando letQuantidade de visualizações: 715 vezes |
Em várias situações nós gostaríamos de declarar variáveis que serão usadas em um espaço limitado, ou seja, dentro de uma função Common Lisp ou até mesmo em um bloco de código. Entram em cena as variáveis locais. Variáveis locais, como o próprio nome indica, são visíveis apenas dentro do corpo de uma função ou dentro do bloco no qual elas são declaradas. Em Common Lisp as variáveis locais são declaradas usando-se o comando let. Veja um exemplo no qual nós declaramos três variáveis locais e que serão usadas no corpo de uma função Multiplicar(): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; vamos definir a função Multiplicar() (defun Multiplicar() ; vamos usar o comando let para declarar ; três variáveis locais (let ((a 3)(b 9)(produto)) ; agora vamos obter o produto das variáveis ; a e b (setq produto (* a b)) ; e mostramos o resultado (format t "O produto dos dois valores é ~D" produto) ) ) ; chamamos a função Multiplicar() (Multiplicar) Ao executar este código nós teremos o seguinte resultado: O produto dos dois valores é 27 Agora veja como podemos declarar variáveis locais dentro de um bloco de código em Common Lisp: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; vamos usar o comando let para declarar ; três variáveis locais (dentro de um bloco ; de código) (let ((a 7)(b 5)(produto)) ; agora vamos obter o produto das variáveis ; a e b (setq produto (* a b)) ; e mostramos o resultado (format t "O produto dos dois valores é ~D" produto) ) Execute este código e você terá o seguinte resultado: O produto dos dois valores é 35 Nos dois trechos de código, se tentarmos acessar as variáveis locais fora de seus escopos, nós teremos o seguinte erro: The variable PRODUTO is unbound. |
Lisp ::: Desafios e Lista de Exercícios Resolvidos ::: Lisp Básico |
Exercícios Resolvidos de Lisp - Como somar dois números em Lisp - Escreva um programa Lisp que leia dois números e mostre a sua somaQuantidade de visualizações: 1440 vezes |
Exercício Resolvido de Lisp - Como somar dois números em Lisp - Escreva um programa Lisp que leia dois números e mostre a sua soma Pergunta/Tarefa: Escreva um programa Common Lisp que solicita ao usuário dois números inteiros e mostre a sua soma. Sua saída deverá ser parecida com: Informe o primeiro valor: 2 Informe o segundo valor: 8 A soma é 10 Veja a resolução completa para o exercício em Common Lisp usando o compilador Steel Bank Common Lisp (SBCL), comentada linha a linha: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- ; Vamos definir as variáveis que vamos ; usar no programa (defvar n1) (defvar n2) (defvar soma) ; Este o programa principal (defun Soma() ; Vamos ler o primeiro valor (princ "Informe o primeiro valor: ") ; talvez o seu compilador não precise disso (force-output) (setq n1 (read)) ; Vamos ler o segundo valor (princ "Informe o segundo valor: ") ; talvez o seu compilador não precise disso (force-output) (setq n2 (read)) ; Agora vamos efetuar a soma dos dois números (setq soma (+ n1 n2)) ; E mostramos o resultado (format t "A soma é ~D" soma) ) ; Auto-executa a função Soma() (Soma) |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Lisp |
Veja mais Dicas e truques de Lisp |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |