3.3.	Exerc’cios de Fixa�‹o
3.3.1.	Itera�‹o
Resolva os seguintes exerc’cios utilizando ”formsÓ para a implementa�‹o de la�os iterativos: do, loop, dolist

1.	Implemente uma fun�‹o COMPRIMENTO que calcule de forma iterativa e devolva como resultado o nœmero de elementos do primeiro n’vel de uma lista. 
2.	Escreva uma fun�‹o INVERSO que, dada uma lista como par‰metro, devolva o inverso da lista. Assim para a Lista (A (B C) D) a fun�‹o devolveria (D (B C) A). 
Toque: voc� pode usar a fun�‹o append.
3.	Escreva uma Fun�‹o MEMBRO que, dado qualquer item (‡tomo ou lista) como seu primeiro par‰metro, devolva NIL se o primeiro par‰metro n‹o aparecer no segundo, que dever‡ obrigatoriamente ser uma lista. Caso ele apareca, a fun�‹o devolver‡ a lista restante, o ’tem inclusive.
Assim:
(membro «a «(b c d)) = nil
(membro «c «(a b c d e) = (c d e)
3.3.2.	Recurs‹o
Como j‡ foi ressaltado em aula, a facilidade e a naturalidade com que a recursividade pode se utilizada em linguagens funcionais como LISP Ž um dos pontos fortes deste enfoque.

4.	Reescreva a fun�‹o MEMBRO acima de forma que seja uma fun�‹o recursiva.
5.	Escreva uma fun�‹o recursiva INTERSEC‚åO que, dadas duas listas, devolva uma lista com os elementos comuns ˆs duas.
3.3.3.	Resposta a alguns exerc’cios
1.	Comprimento/Iterativo

(defun comprimento (lista)
  (setq comp 0)
  (loop 
     (when (eq lista NIL) (return comp))
     (setq comp (+ 1 comp))
     (pop lista)
  )
  comp
)

2. Inverso/Iterativo

(defun inverso (lista)
  (setq inversa '())
  (loop 
      (setq inversa (push (pop lista) inversa))
      (when (eq lista nil) (return inversa))
  )
  inversa
)

4.Membro/Recursiva

(defun membroR (elemento lista)
   (if (equal nil lista)
       nil
       (if (equal elemento (car lista))
           lista
           ( membroR elemento (cdr lista))
       ) ;; fim se
   ) ;; fim se
) ;; fim membroR