MIAS 1 et MASS 1 - Programmation fonctionnelle
TP 3 : Paires pointées et listes

Exercice 1 : En utilisant uniquement la fonction cons, construire les listes suivantes.

      (1 2)      ((1) 2)      (1 (2 . 3))      (() ((1 . 2) 3))      (1 2 3 ((4)))



Exercice 2 : Quelles expressions faut-il évaluer pour extraire l'atome joujou des listes suivantes ?

      (chou (genou (caillou joujou)))               (chou (genou (hibou (joujou))))
      (((joujou) hibou))                            (chou (genou (hibou joujou)))
      (chou genou (joujou) caillou)                 (chou (genou (hibou . joujou)))



Exercice 3 : Spécifier et écrire une fonction second qui renvoie le second élément d'une liste qu'on suppose contenir au moins deux éléments.



Exercice 4 : Spécifier et écrire une fonction echange qui intervertit les deux premiers éléments d'une liste qu'on suppose contenir au moins deux éléments.



Exercice 5 : Spécifier et écrire une fonction qui prend un paramètre x et renvoie la liste : (le carre de x est x2)x est remplacé par sa valeur.



Exercice 6 : Écrire une fonction question qui prend en paramètre une phrase simple du type sujet verbe complement qu'on représente sous la forme d'une liste (où sujet n'est composé que d'un symbole) et qui renvoie la question correspondante sous la forme d'une liste contenant la liste des symboles formant la question et un point d'interrogation.
Par exemple : (question '(je suis un tres bon programmeur en scheme))
renvoie       : ((suis je un tres bon programmeur en scheme) ?)



Exercice 7 : Spécifier et écrire un prédicat deux? qui est vrai si et seulement si son argument est une liste d'exactement deux éléments.



Exercice 8 : Spécifier et écrire une fonction minmax qui prend en paramètre une liste de trois nombres et renvoie une liste formée du minimum et du maximum.
Exemple : (minmax '(3 8 1)) renvoie (1 8).



Exercice 9 : On représente les fractions rationnelles sous la forme de paires d'entiers (nominateur . denominateur) et dans l'exercice on pourra dire d'une telle paire qu'elle est de type Fraction.
Spécifier et écrire les fonctions suivantes qui prennent en arguments deux fractions et renvoie une fraction :

+fraction qui calcule la somme de deux fractions,
-fraction qui calcule la différence de deux fractions,
*fraction qui calcule le produit de deux fractions,
qfraction qui calcule le quotient de deux fractions,
ainsi qu'un prédicat =fraction? qui teste l'égalité de deux fractions.



Exercice 10 : Spécifier et écrire une fonction 2nd-degre qui prend en paramètres les coefficients d'une équation du second degré et qui renvoie les racines réelles de cette équation. Cette fonction doit prendre en compte tous les cas (cf TP2).