MC600 - Segundo semestre de 2003 - LISTA 2 ------------------------------------------ 1. O que estas funções fazem? a. (defun enigma (x) (and (not (null x)) (or (null (car x)) (enigma (cdr x))))) b. (defun mystery (x y) (if (null y) nil (if (eql (car y) x) 0 (let ((z (mystery x (cdr y)))) (and z (+ z 1)))))) 2. O que poderia ser posto no lugar de "x" nas expressões abaixo? a. > (car (x (cdr '(a (b c) d)))) B b. > (x 13 (/ 1 0)) 13 c. > (x #'list 1 nil) (1) 3. Usando apenas operadores apresentados em aula, defina uma função que receba uma lista como um argumento e retorne "true" se um dos elementos é uma lista. 4. Dê uma definição iterativa e uma recursiva de uma função que: a. recebe um inteiro positivo e imprima o mesmo número de pontos. b. recebe uma lista e retorna o número de vezes que o símbolo "a" aparece nela. 5. Um amigo está tentando escrever uma função que retorna a soma de todos os elementos não nulos em uma lista. Ele escreveu duas versões desta função, mas nenhuma delas funciona. Explique o que há de errado com cada uma delas e dê uma versão correta. a. (defun summit (lst) (remove nil lst) (apply #'+ lst)) b. (defun summit (lst) (let ((x (car lst))) (if (null x) (summit (cdr lst)) (+ x (summit (cdr lst))))))