Escolar Documentos
Profissional Documentos
Cultura Documentos
Aulas Práticas de
Fundamentos de Inteligência Artificial
Arlindo Silva
Ana Paula Neves
Aula
4
Soluções dos Exercícios
Recursividade em Listas Simples e Imbricadas
Resolução dos Exercícios do Texto
1. my-remove que recebe uma lista e um elemento e devolve uma nova lista onde foi removido o
elemento.
(defun my-remove1 (x l)
(if (null l)
nil
(if (equal x (first l))
(copy-list (rest l))
(cons (first l) (my-remove1 x (rest l))))))
1. Redefina a função pot de maneira a que a função consiga manipular expoentes negativos (deve
continuar a ser uma função recursiva).
(defun my-remove2 (x l)
(if (null l)
nil
(if (equal x (first l))
(my-remove2 x (rest l))
(cons (first l) (my-remove2 x (rest l))))))
1. Implemente uma função recursiva encontra que devolva t se encontrar um átomo que recebe
como parâmetro, numa lista imbricada. Por exemplo:
(defun encontra (x l)
(if (null l)
nil
(if (equal x (first l))
t
(or
(if (listp (first l))
(encontra x (first l)))
(encontra x (rest l))))))
2
Resolução dos Exercícios Finais
1. Uma palavra palíndrome é uma palavra cuja leitura da esquerda para a direita é igual à leitura da
direita para a esquerda. A função a baixo verifica se a lista que recebe como argumento é um
palíndrome.
(+ (* 1 2 pi) 3 (- 4 5))
Para a maioria das pessoas a leitura da expressão seria facilitada caso fosse utilizada uma notação
infix:
3
Escreva uma função infix que receba expressões matemáticas no formato do Lisp e que retorne a
versão correspondente no formato infix.
3. Escreva uma função my-replace a qual deve receber uma lista e dois elementos como
argumentos e que retorne uma lista a qual deve resultar da substituição de todas as ocorrências do
primeiro elemento pelo segundo na lista argumento.
4. Escreva uma função conta_atomos que conte todos os elementos átomos de uma lista
imbricada que recebe como argumento.
4
> (conta_atomos '(a (b c) d (e (f))))
6
5. Escreva uma função insere que deve receber como argumento uma lista e dois átomos e
retorne uma lista que deve resultar da inserção do segundo átomo à direita de todas as ocorrências do
primeiro átomo na lista argumento.
6. Escreva uma função my-merge que deve receber duas listas de números de igual tamanho. A
função deverá somar os números correspondentes de cada uma das listas e retornar o produto dos
resultados de todas as somas. Por exemplo, (merge ‘(1 2 3) ‘(2 2 2)) deverá retornar
60, dado que (1 + 2) *(2 + 2) * (3 + 2) = 60.
Implemente uma função recursiva que permita calcular o nth número de Fibonacci.
> (fibonacci 5)
8
5
8. Será que a função seguinte termina sempre? (Deverá considerar todos os casos).