2022-12-01 23:45:12 +01:00
|
|
|
let read_file name =
|
|
|
|
let ic = open_in name in
|
|
|
|
let try_read () =
|
|
|
|
try Some (input_line ic)
|
|
|
|
with End_of_file -> None in
|
|
|
|
let rec aux acc =
|
|
|
|
match try_read () with
|
|
|
|
| Some s -> aux (s::acc)
|
|
|
|
| None -> close_in ic; acc in
|
2022-12-06 04:19:40 +01:00
|
|
|
List.rev (aux [])
|
2022-12-01 23:45:12 +01:00
|
|
|
|
2022-12-03 17:01:56 +01:00
|
|
|
module CS = Set.Make(Char);;
|
|
|
|
|
|
|
|
let set_of_string str =
|
|
|
|
let rec aux s i st =
|
|
|
|
if i < 0 then st
|
|
|
|
else aux s (i - 1) (CS.add s.[i] st) in
|
|
|
|
aux str ((String.length str) - 1) CS.empty
|
|
|
|
|
|
|
|
let map_pair f (a, b) = (f a, f b)
|
|
|
|
let curry f x y = f (x, y)
|
|
|
|
let uncurry f (x, y) = f x y
|
|
|
|
let uncurry3 f (x, y, z) = f x y z
|
|
|
|
|
|
|
|
let swap x y = y x
|
2022-12-04 09:32:12 +01:00
|
|
|
|
|
|
|
let pair_of_list l = (List.hd l, List.tl l |> List.hd)
|