diff options
author | Akshay <[email protected]> | 2021-08-08 13:08:33 +0100 |
---|---|---|
committer | Akshay <[email protected]> | 2021-08-08 13:08:33 +0100 |
commit | c9e8dff919c49a13bff601e78cc1e78a7cc8f506 (patch) | |
tree | b9015effe9dc995b083658b12b0de17d61230364 /src/utils.ml | |
parent | ed2a97502cb825877562c05881da4fb2e8eecad6 (diff) |
dump
Diffstat (limited to 'src/utils.ml')
-rw-r--r-- | src/utils.ml | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/src/utils.ml b/src/utils.ml index 8d1094e..62ae3a5 100644 --- a/src/utils.ml +++ b/src/utils.ml | |||
@@ -1,36 +1,33 @@ | |||
1 | module Utils = struct | 1 | exception Empty_list |
2 | exception Empty_list | 2 | let fold fn = function |
3 | let fold fn = function | 3 | | [] -> raise Empty_list |
4 | | [] -> raise Empty_list | 4 | | head :: tail -> List.fold_left fn head tail |
5 | | head :: tail -> List.fold_left fn head tail | ||
6 | 5 | ||
7 | let list_min ls = fold Stdlib.min ls | 6 | let list_min ls = fold Stdlib.min ls |
8 | let list_max ls = fold Stdlib.max ls | 7 | let list_max ls = fold Stdlib.max ls |
9 | 8 | ||
10 | let rec repeat n a = | 9 | let rec repeat n a = |
11 | if n <= 0 | 10 | if n <= 0 |
12 | then [] | 11 | then [] |
13 | else a :: repeat (n - 1) a | 12 | else a :: repeat (n - 1) a |
14 | 13 | ||
15 | let empty ls = (ls = []) | 14 | let empty ls = (ls = []) |
16 | 15 | ||
17 | let rec zip l1 l2 = | 16 | let rec zip l1 l2 = |
18 | match (l1, l2) with | 17 | match (l1, l2) with |
19 | | ([], _) -> [] | 18 | | ([], _) -> [] |
20 | | (_, []) -> [] | 19 | | (_, []) -> [] |
21 | | (h1 :: t1, h2 :: t2) -> (h1, h2) :: zip t1 t2 | 20 | | (h1 :: t1, h2 :: t2) -> (h1, h2) :: zip t1 t2 |
22 | 21 | ||
23 | let rec transpose = function | 22 | let rec transpose = function |
24 | | [] :: _ -> [] | 23 | | [] :: _ -> [] |
25 | | ls -> List.(map hd ls) :: transpose List.(map tl ls) | 24 | | ls -> List.(map hd ls) :: transpose List.(map tl ls) |
26 | 25 | ||
27 | let flip f a b = f b a | 26 | let flip f a b = f b a |
28 | 27 | ||
29 | let rot_right ls = List.(rev ls |> transpose) | 28 | let rot_right ls = List.(rev ls |> transpose) |
30 | let rot_left ls = List.(transpose ls |> rev) | 29 | let rot_left ls = List.(transpose ls |> rev) |
31 | |||
32 | let saturating_sub b a = | ||
33 | if a < b then 0 | ||
34 | else a - b | ||
35 | end | ||
36 | 30 | ||
31 | let saturating_sub b a = | ||
32 | if a < b then 0 | ||
33 | else a - b | ||