Lista 1 (LISP)

Data de entrega

8/5

Metodo de entrega

Mandar o codigo LISP para 970149@ic.unicamp.br

Definições:

Vamos definir profundidade de um atomo em uma lista como sendo:

e assim por diante.

Ex: a profundidade de a na lista ((a) b c) é 2 pois a é um elemento de um elemento da lista.

Da mesma forma podemos definir a profundidade de uma sublista em um lista. Assim a sublista (b c) tem profundidade 2 na lista (a ((b c) d) e)

Outra forma de pensar nisso é ver a lista (de listas) como sendo uma arvore.

A lista (a ((b c) d) e) pode ser vista como uma arvore

+ / | \ a + e / \ + d / \ b c Assim a profundidade de d na arvore é 2, e da lista (b c) tambem é 2.

Questões

1 Escreva a funcao PODA que dado uma lista e um numero (a profundidade maxima), retorna a primeira lista com as sublistas com profundidade maior ou igual que a profundidade maxima substituidas pela lista vazia.

Ex: (poda '((a b) (c) (c (e f) g )) 2) -> ((a b) (c) (c () g))

(poda '(a b c) 2) -> (a b c)

(poda '((a b) (c) (c (e f) g )) 1) -> ( () () () )


2 Escrever a função ORDENA que recebe uma lista de trincas de inteiros (onde uma trinca é uma lista com 3 elementos). Retornar uma lista com as tricas ordenadas por ordem crescente lexicografica, a trinca a b c é menor que x y z se a < x ou a = x e b < y ou a = x e b = y e c < z

Espere até a aula de 26/4 para fazer esse exercicio.


3 Escrever a função CONTA-SIMB que recebe uma lista (grande) de simbolos que aparecem repetidos. A função deve retornar um lista de pares onde cada par é uma lista onde o primeiro elemento é o simbolo, e o segundo a quantidade de vezes que o simbolo aparece.

Por exemplo se a função recebe (a a b c a c) ele deve retornar
((a 3) (b 1) (c 2))

A ordem dos simbolos na lista nao é importante.


4 Vamos assumir que uma arvore de busca binaria é representada em LISP da seguinte forma

( chave valor subarvore-a-esquerda subarvore-a-direita)

assim (4 a (2 b (1 h nil nil) (3 c nil nil)) (7 a nil (9 g nil nil))) representa a arvore:

4,a / \ 2,b 7,a / \ \ 1,h 3,c 9,g Escreva a função RETIRA que dado um arvore binaria e uma chave (um numero) retorna a arvore binaria sem o nó que contem tal chave.

Ex: se a arvore acima esta armazenada no atomo xx entao: (RETIRA xx 2) retorna (por exemplo) (4 a (1 h nil (3 c nil nil)) (7 a nil (9 g nil nil)))


Jacques Wainer
Last modified: Wed Apr 25 09:53:17 EST 2001