QCM
Listes en OCaml — vrai ou faux

1.En OCaml, [1; 2; 3] est un sucre syntaxique pour 1 :: 2 :: 3 :: [].

2.L’opérateur :: est associatif à gauche.

3.Le motif _ lie la valeur filtrée à un nom que l’on peut réutiliser dans le reste du filtrage.

4.La complexité de concat l1 l2 du cours ne dépend pas de la longueur de l2.

5.fold_right (+) l 0 calcule la somme des éléments de l.

Exercice
Tracer l’exécution de somme

On reprend la fonction somme du cours. Dérouler, à la manière de l’exemple du cours pour longueur, l’exécution de somme [3; 5; 2].

somme [3; 5; 2]
= 3 + somme [5; 2]
= 3 + (5 + somme [2])
= 3 + (5 + (2 + somme []))
= 3 + (5 + (2 + 0))
= 3 + (5 + 2)
= 3 + 7
= 10

Chaque appel récursif traite une liste plus courte, jusqu’au cas de base [], puis les additions se déroulent en remontant. Le résultat est .

Exercice
Écrire une fonction récursive sur les listes

Écrire une fonction dernier qui renvoie le dernier élément d’une liste (on fera lever une erreur avec failwith sur la liste vide, qui n’a pas de dernier élément).

let rec dernier l =
  match l with
  | [] -> failwith "liste vide"
  | [x] -> x
  | _ :: t -> dernier t

Le filtrage distingue trois cas, et non deux : la liste vide (erreur), une liste à un seul élément [x] (ce motif, sucre syntaxique pour x :: [], capture directement le dernier élément), et une liste d’au moins deux éléments _ :: t (on ignore la tête, non nécessaire ici, et on rappelle récursivement sur la queue t).

On vérifie que dernier [3; 7; 1; 9] renvoie 9.

Les corrigés sont sur Intégrer

6 blocs de plus : les autres énoncés et tous les corrigés, rédigés en entier. Le reste du programme est écrit de la même main, avec les figures interactives et votre progression.