Vamos definir profundidade de um atomo em uma lista como sendo:
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
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:
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)))