Prefix Map
Implement the function
val prefix_map : ('a list -> 'b option) -> 'a list -> ('b * 'a list) option
so that prefix_map f l is
Some (b, rest)ifpreis the shortest list such thatf preis notNone,f pre = Some b, andpre @ rest = l;Noneiff pre = Nonefor every prefixpreofl(includinglitself).
Examples
let f pre = let s = List.fold_left (+) 0 pre in if s >= 5 then Some s else None
let _ = assert (prefix_map f [1;2;3;4] = Some (6, [4]))
let _ = assert (prefix_map f [1;1] = None)