Bonjour,
J'ai du mal à comprendre la solution du problème suivant dans caml.
"L'aplatissement est en quelque sorte le retrait de toutes les parenthèses intérieures au sein d'une
liste ("List.flatten" en Ocaml) .
let rec aplatir = fun [] -> [] | ([] :: q) -> aplatir q | ((a :: q) :: r) -> a :: aplatir (q :: r);; p aplatir : 'a list list -> 'a list = <fun>
aplatir [[1; 2]; [3; 4; 5]; [6; 7]; [8]];; p int list = [1; 2; 3; 4; 5; 6; 7; 8]"

Ce que je ne saisis pas:
- la nature des arguments [] :: q et (a :: q) :: r (que désignent a,r et q?)?
- comment on construit la récurrence.

Cordialement