Bilan du TP
·  Posez des questions pendant le cours 
•	le cours est court exprès 
•	j'enseigne pour transmettre la connaissance, pas pour planter à l'exam 
•	je fais un poly pour que vous n'ayez pas besoin de gratter 
·  Relisez le cours avant de venir en TP/TD 
·  Apportez le cours en TP (syntaxe), ou consultez-le on-line 
·  Lisez attentivement la feuille qui vous est remise
Tout ce qui est dessus est important et utile. 
·  Notion de symbole (il faudra que je modifie le cours) 
•	(define alpha 10). define est une forme spéciale, déjà vue pour définir les fonctions. Ici, elle sert à : 
o	créer un symbole 
o	c'est-à-dire réserver une case mémoire, à la première adresse libre, disons 42 (mais vous ne le savez pas et n'avez pas besoin de le savoir)
o	mettre 10 dans cette case 
Dorénavant, si je parle de alpha, l'interpréteur 
o	va voir dans sa table d'adressage 
o	y trouve que alpha est synonyme de 42 
o	demande à la mémoire ce qu'il y a à l'adresse 42 
o	reçoit la réponse 10 
(Donner un nombre à chaque étudiant, qu'il/elle fasse la différence avec son numéro de place et son nom) 
•	Si je parle de 'alpha, ou de (quote alpha), l'interpréteur 
o	va voir dans sa table d'adressage 
o	y trouve que alpha existe 
o	et c'est tout 
•	Si je parle de 5, l'évaluateur 
o	reconnait que c'est un nombre 
o	et c'est tout 
•	Si je parle de "alpha", l'évaluateur 
o	reconnait que c'est une chaine de caractères (string) 
o	et c'est tout 

Exemple d'exécution : 
 [47] la fonction cons
 Error : LA has no value
 Error : FONCTION has no value
 Error : CONS has no value
 [48] "la fonction cons"
 "la fonction cons"
 [49] (define la 10)
 10
 [50] (define fonction "bonjour")
 "bonjour"
 [51] la fonction 'cons
 10
 "bonjour"
 cons
 [52]
 
·  Indentez vos programmes
Cela fait gagner énormément de temps pour y trouver les erreurs 
·  Erreur la plus fréquente :
fonc (arg) au lieu de (fonc arg) 
·  carré 
 (define carre
   (lambda (x)
     (* x x)
 ) )
 
·  racine 
 (define racine
   (lambda (x)
     (if (> x 0)
       (sqrt x)
       0
 ) ) )
 
·  echange 
Les morceaux de la liste qui nous intéressent sont :
car , car du cdr , et cdr du cdr .
Il faut fabriquer une liste, donc utiliser la fonction cons :
 (define echange
   (lambda (l)
     (cons
       (car (cdr l))
       (cons
         (car l)
         (cdr (cdr l))
 ) ) ) )
 
·  ou exclusif 
a XOR b est vrai si seul l'un des deux est vrai
 (define ou-ex
   (lambda (a b)
     (or
       (and b1 (not b2))
       (and b2 (not b1))
 ) ) )
 
·  Fibonacci 
 (define fibo
   (lambda (n)
     (if (= n 0)
       1
       (if (= n 1)
         2
         (+ (fibo (- n 1)) (fibo (- n 2)))
 ) ) ) )

 Corrigé du TP4
·  Encore beaucoup de fonc (arg 
·  Indentez 
·  Lisez attentivement les messages d'erreur, bien que ceux du Scheme que vous avez soient peu informants ·  Exercices sur les listes
Toujours se demander : quel est le car, quel est le cdr
Ne jamais oublier que le cdr est une liste
Si vous voyez un point, c'est que vous avez oublié la règle ci-dessus
On évalue de l'intérieur vers l'extérieur. 
•	(() () poule) 
o	Le car est la liste vide, le cdr est (() poule) 
o	Le car est la liste vide, le cdr est (poule) 
o	Donc : 
•	 (cons
•	   '()
•	   (cons
•	     '()
•	     (cons 'poule '())
•	 ) )
•	(oie poule (poule) paon) 
o	oie et (poule (poule) paon)) 
o	poule et ((poule) paon)) 
o	(poule) et (paon) 
•	  (cons
•	    'oie
•	    (cons
•	      'poule
•	      (cons
•	        (cons 'poule '())
•	        (cons 'paon '())
•	  ) ) )
•	(poule oie poule ((poulet))) 
o	poule et (poule oie ((poulet))) 
o	oie et (poule ((poulet))) 
o	poule et (((poulet))) 
o	((poulet)) et () 
o	Continuons sur le car : 
o	(poulet) et () 
o	Encore : 
o	poulet et () 
o	Donc : 
•	  (cons
•	    'poule
•	    (cons
•	      'oie
•	      (cons
•	        'poule
•	        (cons
•	          (cons
•	            (cons 'poulet '())
•	            '()
•	          )
•	          '()
•	  ) ) ) )
•	(((poule) oie) paon) 
o	((poule oie) et (paon) 
o	Sur le car : 
o	(poule) et (oie) 
o	Donc : 
•	  (cons
•	    (cons
•	      (cons 'poule '())
•	      (cons 'oie '())
•	    )
•	    (cons 'paon '())
•	  )
·  Extractions 
•	'(aigle (paon (pie oie))) 
o	aigle et ((paon (pie oie))) : c'est le cdr qui m'intéresse 
o	(paon (pie oie)) et () : car 
o	Sur le car : 
o	paon et ((pie oie)) : cdr 
o	(pie oie) et () : car 
o	Sur le car : 
o	pie et (oie) : cdr 
o	: car 
o	On évalue de l'intérieur vers l'extérieur, donc on écrit les fonctions de droite à gauche, donc on remonte ce qui est ci-dessus : 
•	(car (cdr (car (cdr (car (cdr 
•	ou
•	(cadr (cadr (cadr
•	ou
•	(cadar (cdadr
•	ou ... , pas beaucoup d'importance                            
•	'(((oie) poule)) 
o	((oie) poule) et () : c'est le car qui m'intéresse 
o	(oie) et (poule) : car 
o	oie et () : car 
•	(car (car (car
•	ou 
•	(caaar
•	'(poule paon (oie) aigle) 
o	poule et (paon (oie) aigle) : cdr 
o	paon et ((oie) aigle) : cdr 
o	(oie) et (aigle) : car 
o	oie et () : car 
•	(car (car (cdr (cdr
•	'(paon (poule (poulet (oie)))) 
o	paon et ((poule (poulet (oie)))) : cdr 
o	(poule (poulet (oie))) et () : car 
o	poule et ((poulet (oie))) : cdr 
o	(poulet (oie)) et () : car
o	poulet et ((oie)) : cdr 
o	(oie) et () : car 
o	oie et () : car 
•	(car (car (cdr (car (cdr (car (cdr 
·  fonctions sur les listes 
•	dernier élément d'une liste 
•	  (define der
•	    (lambda (liste)
•	    (if (null? liste)
•	      '()
•	      (if (null? (cdr liste))
•	        (car liste)
•	        (der (cdr liste))
•	  ) ) )
•	ajouter 10 
•	  (define ajout
•	    (lambda (liste)
•	      (if (null? liste)
•	        '()
•	        (cons
•	          (+ (car liste) 10)
•	          (ajout (cdr liste))
•	  ) ) ) )
·  sous-liste des symboles 
  (define symlist
    (lambda (liste)
      (if (null? liste)
        '()
        (if (symbol? (car liste))
          (cons (car liste) (symlist (cdr liste)))
          (symlist (cdr liste))
  ) ) ) )
·  n premiers caractères 
  (define ncars
    (lambda (liste n)
      (if (or (= n 0) (null? liste))
        '()
        (if (string? (car liste))
          (cons
            (car liste)
            (ncars (cdr liste) (- n 1))
          )
          (ncars (cdr liste) n)
  ) ) ) )
·  nombre d'occurrences 
  (define nbocc
    (x liste)
    (if (null? liste)
      0
      (if (equal? (car liste) x)
        (+ (nbocc x (cdr liste)) 1)
        (nbocc x (cdr liste))  ) ) )