Você está aqui: Lisp ::: Dicas & Truques ::: Struct (Estruturas, Registros)

Como criar estruturas em LISP

Quantidade de visualizações: 323 vezes
A linguagem LISP (incluindo a implementação ANSI Common Lisp e a AutoLISP, a versão LISP para o AutoCAD) permite, como a maioria das linguagens de programação, a criação de estruturas.

Uma estrutura é um tipo de dados definida pelo usuário, e que permite o agrupamento de dados de tipos diferentes. Podemos pensar em estruturas como se fosse um registro. Na verdade, as linguagens Pascal e Delphi mantém um tipo de dados chamado record.

Assim, uma estrutura "aluno" poderia agrupar a matrícula do aluno, o seu nome, sua idade, seu curso, etc, cada informação sendo de um tipo de dados diferente.

Como usar a macro defstruct da LISP para criar estruturas

A definição de estruturas na linguagem LISP é feita por meio da macro defstruct. Veja, por exemplo, um trecho de código que cria uma estrutura chamada produto:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

; Vamos definir a estrutura produto
(defstruct produto 
  codigo
  nome
  preco  
)

; Esta é a função principal
(defun principal()
  ; vamos declarar as variáveis locais que precisamos
  (let ((p))
    ; vamos criar uma nova instância da estrutura produto
    (setq p (make-produto :codigo 45 :nome "Arroz Tipo 1" 
      :preco 8.23))
	
    ; E mostramos o resultado
    (princ "Os dados do produto são:")
    (terpri)
    (princ p)
  )
)
 
; Auto-executa a função principal()
(principal)

Ao executar este código LISP nós teremos o seguinte resultado:

Os dados do produto são:
#S(PRODUTO :CODIGO 45 :NOME Arroz Tipo 1 :PRECO 8.23)

Note como usamos a função make-produto para criar um novo objeto da estrutura produto. Esta função é um construtor criado implicitamente pela linguagem para que possamos criar as novas instâncias da estrutura.

Se você observar bem o código anterior você verá que exibimos todo o conteúdo da estrutura produto por meio da variável p. Porém, haverá situações nas quais queremos exibir os valores individuais dos atributos. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

; Vamos definir a estrutura produto
(defstruct produto 
  codigo
  nome
  preco  
)

; Esta é a função principal
(defun principal()
  ; vamos declarar as variáveis locais que precisamos
  (let ((p))
    ; vamos criar uma nova instância da estrutura produto
    (setq p (make-produto :codigo 45 :nome "Arroz Tipo 1" 
      :preco 8.23))
	
    ; E mostramos o resultado
    (format t "O código do produto é ~D" (produto-codigo p))
    (format t "~%O nome do produto é ~S" (produto-nome p))
    (format t "~%O preço do produto é ~S" (produto-preco p))
  )
)
 
; Auto-executa a função principal()
(principal)

Ao executarmos esta nova versão do código LISP nós teremos o seguinte resultado:

O código do produto é 45
O nome do produto é "Arroz Tipo 1"
O preço do produto é 8.23

Finalmente, o valor dos atributos das instância de uma estrutura LISP podem ser modificados da seguinte forma:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

; Vamos definir a estrutura produto
(defstruct produto 
  codigo
  nome
  preco  
)

; Esta é a função principal
(defun principal()
  ; vamos declarar as variáveis locais que precisamos
  (let ((p))
    ; vamos criar uma nova instância da estrutura produto
    (setq p (make-produto :codigo 45 :nome "Arroz Tipo 1" 
      :preco 8.23))
	
    ; Vamos mostrar o código do produto
    (format t "O código do produto é ~D" (produto-codigo p))
	
    ; Vamos modificar o código do produto
    (setf (produto-codigo p) 87)
	
    ; E mostramos o novo código
    (format t "~%O novo código do produto é ~D" (produto-codigo p))
  )
)
 
; Auto-executa a função principal()
(principal)

Ao executar esta versão final do código nós teremos:

O código do produto é 45
O novo código do produto é 87

Link para compartilhar na Internet ou com seus amigos:

Lisp ::: Desafios e Lista de Exercícios Resolvidos ::: Lisp Básico

Exercícios Resolvidos de Lisp - Como calcular a soma, o produto, a diferença e o quociente de dois números inteiros informados pelo usuário

Quantidade de visualizações: 928 vezes
Pergunta/Tarefa:

Escreva um programa Common Lisp que pede para o usuário informar dois número inteiros. Em seguida mostre a soma, o produto, a diferença e o quociente dois dois números informados.

Sua saída deverá ser parecida com:

Informe o primeiro número: 8
Informe o segundo número: 3
A soma dos números é: 11
O produto dos números é: 24
A diferença dos números é: 5
O quociente dos números é: 2.66667
Resposta/Solução:

Veja a resolução comentada deste exercício usando Common Lisp:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

; Este é o programa principal
(defun Exercicio()
  ; Variáveis usadas na resolução do problema
  (let ((n1)(n2)(soma)(produto)
    (diferenca)(quociente))
    ; Vamos ler os dois números
    (princ "Informe o primeiro número: ")
    ; talvez o seu compilador não precise disso
    (force-output)
    ; atribui o valor lido à variável n1
    (setq n1 (read))
    (princ "Informe o segundo número: ")
    ; talvez o seu compilador não precise disso
    (force-output)
    ; atribui o valor lido à variável n2
    (setq n2 (read))
  
    ; vamos somar os dois números
    (setq soma (+ n1 n2))
    ; vamos calcular o produto
    (setq produto (* n1 n2))
    ; vamos calcular a diferença
    (setq diferenca (- n1 n2))
    ; vamos calcular o quociente
    (setq quociente (/ n1 (* n2 1.0)))
  
    ; E mostramos o resultado
    (format t "A soma dos números é ~D" soma)
    (format t "~%O produto dos números é ~D" produto)
    (format t "~%A diferença dos números é ~D" diferenca)
    (format t "~%O quociente dos números é ~F" quociente)	
  )
)

; Auto-executa a função Exercicio()
(Exercicio)



Lisp ::: Fundamentos da Linguagem ::: Estruturas de Controle

Como testar uma condição em Lisp usando a macro if

Quantidade de visualizações: 1009 vezes
Nesta dica mostrarei como podemos usar a macro if da linguagem Common Lisp para testar uma condição. Por se tratar de um exemplo básico, não mostrarei um caminho alternativo, ou seja, a mensagem será exibido somente se a condição for satisfeita. Em outras dicas eu complemento com o desvio opcional.

Veja um exemplo no qual solicitamos um número ao usuário e informamos se o valor lido é maior que 10:

----------------------------------------------------------------------
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 numero)

; Este é o programa principal
(defun Estudos()
  ; Vamos ler o número
  (princ "Informe um número: ")
  ; talvez o seu compilador não precise disso
  (force-output)
  ; atribui o valor lido à variável numero
  (setq numero (read))
  
  ; vamos testar se este número é maior que 10
  (if (> numero 10)
    (format t "~D é maior que 10~%" numero))
  
  ; E mostramos o número informado
  (format t "O número informado foi: ~D" numero)
)

; Auto-executa a função Estudos()
(Estudos)

Ao executar este código Common Lisp nós teremos o seguinte resultado:

Informe um número: 12
12 é maior que 10
O número informado foi: 12


Lisp ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o cosseno de um ângulo em LISP e AutoLISP (AutoCAD) usando a função cos() - Calculadora de cosseno em LISP

Quantidade de visualizações: 597 vezes
Em geral, quando falamos de cosseno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função cosseno disponível nas linguagens de programação para calcular o cosseno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria.

No entanto, é sempre importante entender o que é a função cosseno. Veja a seguinte imagem:



Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles.

Assim, o cosseno é a razão entre o cateto adjascente e a hipotenusa, ou seja, o cateto adjascente dividido pela hipotenusa. Veja a fórmula:

\[\text{Cosseno} = \frac{\text{Cateto adjascente}}{\text{Hipotenusa}} \]

Então, se dividirmos 30 por 36.056 (na figura eu arredondei) nós teremos 0.8320, que é a razão entre o cateto adjascente e a hipotenusa (em radianos).

Agora, experimente calcular o arco-cosseno de 0.8320. O resultado será 0.5881 (em radianos). Convertendo 0.5881 radianos para graus, nós obtemos 33.69º, que é exatamente o ângulo em graus entre o cateto adjascente e a hipotenusa na figura acima.

Pronto! Agora que já sabemos o que é cosseno na trigonometria, vamos entender mais sobre a função cos() da Common Lisp e da AutoLISP (a implementação LISP do AutoCAD). Esta função recebe um valor numérico e retorna um valor, também numérico) entre -1 até 1 (ambos inclusos). Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

(format t "Cosseno de 0 = ~F~%" (cos 0))
(format t "Cosseno de 1 = ~F~%" (cos 1))
(format t "Cosseno de 2 = ~F" (cos 2))

Ao executar este código LISP nós teremos o seguinte resultado:

Cosseno de 0 = 1.0
Cosseno de 1 = 0.5403023
Cosseno de 2 = -0.41614684

Note que calculamos os cossenos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função cosseno mostrada abaixo:




Veja mais Dicas e truques de Lisp

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
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
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 65 usuários muito felizes estudando em nosso site.