Lista 1 LISP (turma B e MC600)

Instruções:

Definições:

Uma lista que contem sub listas, e sub-sublistas pode ser vista como uma arvore. A lista (a ((b c) d) e) pode ser vista como a árvore

+ 0 / | \ a + e 1 / \ + d 2 / \ b c 3 Nesta lista, chamaremos de uma árvore uma lista que contem sub-listas e subsub-listas.

O número ao lado da arvore é a profundidade do nivel.

Questões

  1. Escreva a função impares que dado uma lista (sem sub-listas) retorna uma lista com os elementos que estão nas posições impares (o primeiro elemento da lista esta na posição 1)

    Ex: (impares '(e 5 t w q 3 4)) retorna (e t q 4)

    Ex: (impares '()) retorna ()

  2. Escreva a função prof-media que dado átomo e uma árvore, retorna a profundidade media do átomo na árvore

    Ex: (prof-media 'r '( e (r (t)) (t (r)) )) retorna 5/2

  3. Escreva a função mais-comum que dado um string que representa um arquivo que contem texto (com apenas um branco separando as palavras e sem pontuação), retorna uma lista com a palavra mais comum e quantas vezes ela aparece no texto. Não considere maisculas e minusculas como diferente. (Uma hash table cai como uma luga para esse problema, mas o teste de igualdade deve ser pensado)

    Se o arquivo dado.txt contém o texto

    aaa bbb aaa ccc AAA aaa Baa Aaa ddd ddd ddd então (mais-comum "dado.txt") retorna ("aaa" 5)
  4. Escreva a função arvore-rev que reverte uma arvore em todos os niveis

    (arvore-rev '(a (b c) (( d e) f) g)) retorna (g (f (e d)) (c b) a)