Engineering School, 2nd year
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

152 lines
2.9 KiB

#|
| #(@)ex1.lsp ENSICAEN 2005-11-21
|
| @author MASSE Nicolas (2005-Groupe4-LIMIN) <nicolas27.masse@laposte.net>
| @author LIMIN Thomas (2005-Groupe4-MASSE) <thomas.limin@laposte.net>
|
| ENSICAEN
| 6 Boulevard Marechal Juin
| F-14050 Caen Cedex
|
| Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre
| reproduit, utilise ou modifie sans l'avis express de ses auteurs.
|#
#|
| Exercices avec parcours de listes, en profondeur et à tous les niveaux
|#
#|
| @version 21-11-2005
|
| @Fait: tout
|
| @Afaire: -
|#
#|
| Rappel
| a)
| Parcours d'une liste à un niveau avec affichage des éléments
|#
(defun parcours1N (l)
( if (null l)
()
(progn
(print (car l))
(parcours1N (cdr l))
)
)
)
(print "Parcours de (8 ((7 6) (5 4)) 3 (2 1))) à 1 niveaux avec affichage des éléments")
(parcours1N '(8 ((7 6) (5 4)) 3 (2 1)) )
#|
| Rappel
| b)
| Parcours d'une liste à tous les niveaux avec affichage des atomes
|#
(defun parcours (l)
(cond
((null l)
()
)
((atom (car l))
(print(car l))
(parcours (cdr l))
)
(t
(parcours (car l))
(parcours (cdr l))
)
)
)
(print "Parcours de (8 ((7 6) (5 4)) 3 (2 1))) à tous les niveaux avec affichage des atomes")
(parcours '(8 ((7 6) (5 4)) 3 (2 1)) )
#|
| 1)
| Ecrire une fonction inversant une liste à tous les niveaux
|#
(defun inverse (l)
(cond
((null l)
()
)
((atom (car l))
(append (inverse (cdr l)) (list (car l)))
)
(t
(append (inverse (cdr l)) (list (inverse (car l))))
)
)
)
(print "Inversion de ( 8 ((7 6) (5 4)) 3 (2 1)))")
(print (inverse '(8 ((7 6) (5 4)) 3 (2 1)) ) )
#|
| 2)
| Ecrire une fonction calcul profondeur prenant une expression en argument
| et retournant le nombre de niveaux qu'elle comporte
|#
(defun calcul_profondeur (expr)
(cond
((null expr)
0
)
((atom (car expr))
(max 1 (calcul_profondeur (cdr expr)))
)
(t
(max (+ 1 (calcul_profondeur (car expr))) (calcul_profondeur (cdr expr)))
)
)
)
(print "Calcul de profondeur de ( 8 ((7 (6 6)) (5 4)) 3 (2 1)))")
(print (calcul_profondeur '(8 ((7 (6 6)) (5 4)) 3 (2 1)) ) )
#|
| 3)
| Ecrire la fonction oter-pred à 2 arguments:
| une prédicat
| une liste quelconque
| donnant comme résultat la liste de laquelle sont enlevés tous les objets
| satisfaisant au prédicat
|#
(defun oter-pred (pred liste)
(cond
((null liste)
()
)
((atom (car liste))
( if (funcall pred (car liste))
(cons (car liste) (oter-pred pred (cdr liste)))
(oter-pred pred (cdr liste))
)
)
(t
(cons (oter-pred pred (car liste)) (oter-pred pred (cdr liste)))
)
)
)
(print "Oter de ( 8 ((7 (6 6)) (5 4)) 3 (2 1))) les objets satisfaisant: objet > 3")
(defun pre1 (o)
(> o 3)
)
(print (oter-pred 'pre1 '(8 ((7 (6 6)) (5 4)) 3 (2 1)) ) )