summaryrefslogtreecommitdiff
path: root/src/Utilities.ml
blob: 6452d56f7a4addb1b4d16fcfb58ef24e889baed6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(* Split a list at a given index [i] (the first list contains all the elements
   up to element of index [i], not included, the second one contains the remaining
   elements. Note that the first returned list has length [i].
 *)
let rec list_split_at (ls : 'a list) (i : int) =
  if i < 0 then raise (Invalid_argument "list_split_at take positive integers")
  else if i = 0 then ([], ls)
  else
    match ls with
    | [] ->
        raise
          (Failure
             "The int given to list_split_at should be <= the list's length")
    | x :: ls' ->
        let ls1, ls2 = list_split_at ls' (i - 1) in
        (x :: ls1, ls2)