MC600 - Prova 1 - Turma A

MC600 - Prova 1 - Turma A

26 de outubro de 2000

Prof. João Meidanis

Questão 1 (valor 2,5)

Escreva uma função intercala em LISP que recebe duas listas de mesmo tamanho e retorna uma lista onde o primeiro elemento vem da primeira lista, o segundo da segunda, o terceiro novamente da primeira, e assim por diante, intercalando os elementos da primeira e da segunda listas mas mantendo a ordem que tinham. A lista resultante terá duas vezes o tamanho das listas iniciais. Eis um exemplo de funcionamento desta função:

> (intercala '(a b c) '(x y z))
(A X B Y C Z).

Questão 2 (valor 2,0)

Desenhe a representação gráfica das S-expressões abaixo:
(((A . B). C).(A . (C . B)))
((A) B (C D) ((E) F))

Questão 3 (valor 2,5)

Já que estamos falando de representação gráfica, escreva uma função ncaixas em LISP que recebe uma S-expressão e retorna o número de "caixas" que aparecerão em sua representação gráfica. Por exemplo:
> (ncaixas '(a (b) c))
4

Questão 4 (valor 3,0)

Suponha que estejamos representando polinômios em LISP através de listas contendo seus coeficientes. O primeiro elemento da lista é o termo independente, o segundo é o coeficiente de x, e assim por diante. O polinômio 3x2 + 7x - 2 seria então (-2 7 3). O polinômio x5 - 1 seria (-1 0 0 0 0 1). Observe que os termos de maior grau vêm mais para o fim da lista. Escreva uma função prod em LISP que recebe dois polinômios e retorna seu produto.

Boa Sorte!