;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 1 à tester soi-même ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 2 ;; CL-USER> (cons (cons 1 (cons 2 nil)) (cons 3 (cons 4 nil))) ;; ((1 2) 3 4) ;; CL-USER> (cons (cons 1 2) (cons (cons 3 4) nil)) ;; ((1 . 2) (3 . 4)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 3 (defun prefix-to-postfix (exp) (if (atom exp) exp (append (mapcar #'prefix-to-postfix (cdr exp)) (list (car exp))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 4 ;; 1- (1 2 3 4) ;; 2- (1 2 3 4) ;; 3- iota1 et iota2 sont équivalentes ;; 4- iota prend comme unique argument un entier n et retourne ;; la liste des entiers de 1 à n soit (1 2 ... n) ;; 5- O(n) ;; 6- O(n^2) ;; 7- (defun iota-rt (n) (labels ((aux (n accu) (if (zerop n) accu (aux (1- n) (cons n accu))))) (aux n '()))) ;; 8- ;; iota1 est linéaire mais non récursive terminale ;; les appels doivent donc être empilés dans la pile ;; elle sera donc limitée à de petites valeurs du fait ;; de la taille limitée de la pile ;; iota-rt est linéaire et récursive terminale; les appels n'ont donc ;; pas besoin d'être empilés et pourra être utilisée avec des valeurs ;; de n arbitrairement grandes. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Exercice 5 (defun iota-f (f n) (mapcar f (iota-rt n)))