Voltar | Plano de Ensino | Material da Disciplina |
Modelo de apresentação de Trabalhos | Leituras Complementares | Links Interessantes
Exercícios

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