let rec last = function | [] -> None | [x] -> Some x | _ :: t -> last t
let slice list i k = let rec take n = function | [] -> [] | h :: t -> if n = 0 then [] else h :: take (n-1) t in let rec drop n = function | [] -> [] | h :: t as l -> if n = 0 then l else drop (n-1) t in take (k - i + 1) (drop i list)