5. List.filter
1) ('a -> bool) -> 'a list -> 'a list
Code
2) let filter f =
let rec find acc l =
match l with
[] -> rev acc
|l1::ls -> if f l1 then find (l1::acc) ls
else find acc ls in
find [];;
3) Функция оставляет в списке только те элементы, которые соответствуют правилу f.
4) Быстрая сортировка
Code
let rec qsort l =
match l with
[] -> []
|l1::ls -> qsort (filter (fun x -> x < l1) ls) @ [l1] @
qsort (filter (fun x -> x >= l1) ls);;
Ещё 2 варианта реализации:
Code
let bad_filter f l =
flatten (map (fun x -> if f x then [x] else []) l);;
Code
let (>>) x f = f x;;
let bad_filter f l =
l >> map (fun x -> if f x then [x] else []) >> flatten;;