(* Renversement d'une liste, en utilisant append *) let rec append l1 l2 = match l1 with [] -> l2 x :: r1 -> x :: append r1 l2 let rec rev = function [] -> [] x :: l -> append (rev l) [x] (* note : c'est évidemment très naïf et de complexité quadratique une bien meilleure solution consiste à écrire une fonction plus générale rev_append qui calcule directement (append (rev l) acc) pour deux listes acc et l, ainsi *) let rec rev_append acc = function [] -> acc x :: l -> rev_append (x :: acc) l (* et à l'appliquer ensuite avec la liste vide *) let rev l = rev_append [] l (* ce qu'on pouvait écrire directement comme *) let rev l = List.fold_left (fun acc x -> x :: acc) [] l
This document was generated using caml2html