Lisp
Semestre 2011.2 - 19 de Setembro de 2011
Lisp
1
1.1
Questões
Listas
Para esta seção assuma que todas as listas são listas de listas. Ou seja, uma lista l pode ser do tipo (a,b,c , ( a,d,e, ( f , (((((g))))) ,a ),g), a ). Para as demais seções assuma uma lista simples. 1. Escreva a função (inserereEsq new old l), que insere o atomo new a esquerda da primeira ocorrencia do atomo old em l. 2. Escreva a função (substituaTodos new old l), que substitui todas as ocorrencias de old por new em l. 3. Escreva a função (eqListas l1 l2), que retorna verdadeiro se as duas listas são iguais.
1.2
Ordenação
1. Escreva a função (meububblesort l), que ordenada uma lista l. 2. Escreva a função (meumergesort l), que ordenada uma lista l.
1.3
Funções Aritméticas
1. Escreva a função (vec+ vec1 vec2), que retorna um vetor que soma os elementos de mesma posição nos vetores vec1 vec2, ex. (vec+ ’(7 20 5) ’(5 3 6 4 5)), retorna (12 23 11 4 5). 2. Escreva a função potencia (potencia v1 v2) que recebe como parametro dois valores e retorna como resultado a potencia de v1 em função de v2. Ex:(potencia 2 3) = 8. Neste caso será permitido o uso de quaisquer operadores nativo salvo o da propria função potencia. A logica da função, entretanto, deve ser equivalente ao desenvolvido na lista de Prolog.
1
1.4
Arvores
Obs: Esta seção é opcional e não sera corrigida. Pode-se representar uma árvore generica usando-se uma lista generica da seguinte forma: (A (B (E)) (C (F) (G) (H))) (D (I) (J))), veja abaixo. O grau de uma arvore é o maximo numero de filhos de um no desta arvore. Dica: se quiser voce pode usar as funções max, maximo entre dois elementos e length, tamanho de uma lista.
Figura 1: Arvore (A (B (E)) (C (F) (G) (H))) (D (I) (J)))
1. Escreva uma função