Scheme - TD n° 8
25 avril 2001
Récursions sur les listes (suite)
Base de données
(define (mixage l1 l2)
(cond ((null? l1) l2)
(else (cons (car l1) (mixage l2 (cdr l1))))))
Evaluer:
> (mixage '(1 2 3 4 5) '(a b c)) (1 a 2 b 3 c 4 5) > (mixage '(une voiture la ensoleillee) '(belle sur route)) (une belle voiture sur la route ensoleillee)
(define (met-a-zero l)
(cond ((null? l) ())
((number? (car l)) (cons 0 (met-a-zero (cdr l))))
(else (cons (car l) (met-a-zero (cdr l))))))
= (map (lambda (x) (if (number? x) 1 x)) l)
(define (met-a-zero l)
(cond ((null? l) ())
(else (cons (if (number? (car l)) 0 (car l))
(met-a-zero (cdr l))))))
Faire la fonction (coupler l1 l2) qui fabrique la liste des couples d'éléments de l1 et l2 en même position.
(define (coupler l1 l2)
(cond ((or (null? l1) (null? l2)) ())
(else (cons (list (car l1) (car l2))
(coupler (cdr l1) (cdr l2))))))
Faire une fonction (remplace-max l) qui remplace les deux premiers éléments de l par le plus grand des deux. En remarquant que la liste obtenue est strictement plus courte que l, en déduire une fonction (maximum l) qui calcule l'élément maximum d'une liste de nombres.
(define (maximum l)
(cond ((null? l) ())
((null? (cdr l)) (car l))
(else (maximum (remplace-max l)))))
(define (remplace-max l)
(cons (if (> (car l) (cadr l)) (car l) (cadr l))
(cddr l)))
Faire la fonction (double l) qui double tous les éléments de l:
> (double '(je be gaye))
(je je be be gaye gaye)
(define (double l)
(cond ((null? l) ())
(else (cons (car l)
(cons (car l) (double (cdr l)))))))
Faire la fonction (chercher-note nom notes2000) qui donne la note de la personne dont le nom est donné en argument (les espaces dans les noms sont remplacés par des tirets) :
> (chercher-note 'dehennin notes2000) 16Faire la fonction (chercher-homo nom notes2000) qui fait la même chose que la précédente, mais donne la liste des prénoms et des notes correspondantes pour les homonymes (on prolonge le traitement de chercher-note en ajoutant un appel récursif dans le cas où le nom est trouvé).
> (chercher-note 'bellee notes2000) ((??? ?) (??? ?) (??? ?))Faire (modifier-note nom val notes2000) qui change la note de la personne dont le nom est donné, et la remplace par val.
On copiera le contenu de ce fichier, et on l'insèrera dans la fenêtre Définition de DrScheme, pour en faire une liste beatles.
Faire la fonction (chercher-chansons disque liste) qui donne la liste des chansons d'un disque :
> (chercher-chansons '(Sgt. Pepper's Lonely Hearts Club Band) beatles) ((lp side 1) (sgt. pepper 's lonely hearts club band) (with a little help from my friends) (lucy in the sky with diamonds) (getting better) (fixing a hole) (she 's leaving home) (being for the benefit of mr. kite) (lp side 2) (within you ,without you) (when i 'm sixty four) (lovely rita) (good morning ,good morning) (sgt. pepper 's lonely hearts club band (reprise)) (a day in the life))Faire la fonction (chercher-disques chanson liste) qui donne tous les disques sur lesquels figure la chanson :
> (chercher-disques '(Let it be) beatles) (((let it be) (may 8 ,1970)) ((the beatles 1967-1970) (april 2 ,1973)) ((the beatles ballads - 20 original tracks) (october 13 ,1980)) ((reel music) (march 22 ,1982)) ((the beatles - 20 greatest hits) (october 15 ,1982)) ((past masters volume two) (march 8 ,1988)) ((the beatles anthology 3) (october 29 1996))) > (chercher-disques '(You've got to hide your love away) beatles) (((help!) (august 6 ,1965)) ((help!) (august 13 ,1965)) ((the beatles 1962-1966) (april 2 ,1973)) ((love songs) (november 19 ,1977)) ((the beatles ballads - 20 original tracks) (october 13 ,1980)) ((reel music) (march 22 ,1982)))(il manque la version du disque The beatles anthology 2, parce que (take 5) est inséré dans le titre de la chanson...)
> (chercher-disques '(You've got to hide your love away (take 5)) beatles) (((the beatles anthology 2) (march 19 ,1996)))