(** Une fonction `f3` qui prend deux `int` `x` et `y` et une liste d'`int` `l` et renvoie la liste (de `bool`) indiquant pour chacun des éléments de `l` s'il est bien compris entre `x` et `y`. *)
letf3(x:int)(y:int)(l:intlist):boollist=
List.map(fune->x<=e&&e<=y)l
(* ou bien *)
letf3(x:int)(y:int):intlist->boollist=
List.map(fune->x<=e&&e<=y)
;;
assert(f337[1;4;2;12]=[false;true;false;false])
(** Une fonction `f4` qui prend deux `int` `x` et `y` et une liste d'`int` `l` et renvoie la liste des éléments de `l` qui sont compris entre `x` et `y`. *)
letf4(x:int)(y:int)(l:intlist):intlist=
List.filter(fune->x<=e&&e<=y)l
(* ou bien *)
letf4(x:int)(y:int):intlist->intlist=
List.filter(fune->x<=e&&e<=y)
;;
assert(f437[1;4;2;12]=[4])
(** Une fonction `f5` qui prend une liste de liste d'`int` et renvoie la liste sans les (sous-)listes vides. *)
(** Coder une fonction `f6` qui prend une liste d'`int option` `l` et renvoie une liste d'`int` contenant les valeurs `int` contenues dans `l`. Par exemple, `f6 [ Some 3; None; Some 18; Some 42; None; Some 37; None]` vaudra `[3; 18; 42; 37]`. *)
letf6(l:intoptionlist):intlist=
letl1=List.filter(funo->o!=None)lin
List.map
(funo->
matchowith
|None->0(* n'arrive pas à cause du filter précédent *)
|Somex->x)
l1
(* ou bien *)
letf6(l:intoptionlist):intlist=
l
|>List.filter((!=)None)
|>List.map(funo->
matchowith
|None->0(* n'arrive pas à cause du filter précédent *)