Voltar | | | Plano de Ensino | | | Material da Disciplina | | |
Modelo de apresentação de Trabalhos | | | Leituras Complementares | | | Links Interessantes |
Exercícios de LISP
1.
Desenhe
as representações internas de dados para as listas seguintes:
(A 17 -3)
((A 5 C) %)
((A 5 C) (%))
(NIL 6 A)
((A B))
(* ( + 15 (- 6 4)) -3)
2.
Qual é o
CAR de cada uma das listas do exercício anterior?
3.
Qual é o
CDR de cada uma das listas do exercício anterior 1?
4.
Escreva
as declarações necessárias, usando CAR e CDR, para obter os valores seguintes
das listas do exercício 1:
(-3) (-3
-3)
(C %) (A
C %)
(5 %) (5
(%))
(6 (6)) (6
(6) 6)
((B) A) (A
((B) B))
5.
Defina
uma representação conveniente na forma de lista para um conjunto de sobrenomes
juntamente com os números de telefones de pessoas. O número de telefone deve
permitir a inclusão de códigos de DDD e DDI para números não locais. Como
resolveria o caso para pessoas que estivessem na lista, mas não tivessem
telefone ?
6.
Escreva
uma declaração em LISP para executar cada uma das operações abaixo:
• Ler dois números,
imprimir sua soma e acrescentar 3 ao resultado. Assim 5 e 11 devem produzir 16
e 19 na tela.
• Ler um único valor e imprimí-lo como uma lista.
Assim o valor 6 deve produzir (6).
• Ler dois valores e imprimir sua soma como uma
lista. Deste modo 6 e 7 devem produzir a lista (13).
• Ler três números e imprimí-los como uma lista.
• Ler três números e imprimir a soma dos dois
primeiros e o produto desta pelo terceiro como uma lista.
7.
Escreva
uma função que:
• Devolva o valor 1 se seu parâmetro for maior
que zero, -1 se for negativo, 0 se for zero.
• Leia um nome. Se este for o mesmo nome que o
dado como parâmetro, a função deve imprimir uma saudação simplese devolver o
valor t. Se for diferente, nao deve
imprimir nada e devolver nil.
• Dados três parâmetros, se o primeiro for um
asterisco, os outros dois serão multiplicados; se for uma barra, o segundo deve
ser dividido pelo terceiro; se não for nenhum dos dois, imprima uma mensagem de
erro e assuma o valor zero. A função deve devolver como valor o resultado da
operação aritmética.
• Devolva t
se seu primeiro parâmetro estiver no conjunto de valores especificado pelo seu
segundo e terceiro parâmetros e nil se não estiver. Asim: (func-4 5 5 7) = t e (func-4
6 5 7) = nil.
• Aceite um valor simples e uma lista como
parâmetros. Devolva t se o valor
estiver na lista, nil caso nao
esteja (este exercício pode ser resolvido de forma recursiva - pense um
pouco...).
8. Escreva uma função que leia do usuário uma lista de
produtos e seus respectivos preços, colocando-os em uma lista organizada por
pares produto-preço. A entrada de dados é finalizada digitando-se a palavra
‘fim ao invés de um nome de produto.
Utilize o
comando loop para implementar o laço de leitura e defina uma variável global
onde a lista ficará armazenada ao fim da leitura.
Os pares
produto-preço você pode organizar tanto como um cons, uma sublista ou uma
estrutura com campos produto e preço. A list tem a vantagem de ser extremamente
flexível: você pode extender a sua estrutura de dados sem necessitar entrar com
os dados de novo. O cons é a forma mais econômica em termos de memória. A
estrutura permite uma modelagem elegante. Fica a seu critério.
9. Escreva uma
função ou conjunto de funções, que, através de um menu de opções, realizem as seguintes tarefas:
a) Pesquisar preço de um produto: Um
ambiente onde o usuário entra com o nome de um produto e o programa ou diz que
não encontrou o produto ou devolve o preço.
b) Mostrar em ordem alfabética toda a lista de produtos disponíveis com os
respectivos preços, formatada na tela. A cada 20 produtos o programa deve fazer
uma pausa e esperar o usuário teclar alguma coisa para continuar.
c) Fazer compras: Um ambiente onde o
usuário pode entrar com nomes de produtos e quantidades que deseja comprar. Ao
final o programa emite uma lista com todos os produtos comprados, total parcial
e total final das compras.
Exercícios de Cálculo Lambda
1. Reduza as seguintes expressões-lambda
às suas respectivas formas normais:
(((lf.lx.ly.(x)(f)y)p)q)r
(((lx.ly.lz.(y)x)(x)y)(u)z)y
(lx.(ly.(x)(y)y) lz.(x)(z)(lu.lv.u)w
(((lx.ly.lz.((x)z)(y)z)(lu.lv.u)w)ls.s)t
(((lx.(lz.(x)(y)y)ly.(x)(y)y)lz.lu.lv.(u)(z)v)(lr.ls.r)t)w
(lx.x(xy))N
(lx.y)N
(lx.(ly.xy)N)M
(lx.xx)(lx.xx)
(lx.xxy)(lx.xxy)
(lx.z)((lx.xxy)((lx.xxy))
2. Dê uma definição recursiva
para o maior divisor comum de dois inteiros e calcule o valor de ((mdc) 10) 14) utilizando o combinador
Y.
3. Sugestão: tente o mesmo para os números de Fibonacci e use Y para computar (Fibo) 5.
Voltar | | | Plano de Ensino | | | Material da Disciplina | | |
Modelo de apresentação de Trabalhos | | | Leituras Complementares | | | Links Interessantes |