Splitting a list of items into two lists of odd and even indexed items

f#, functional-programming, list, ocaml, tail-recursion

Solution

Implementation which does not stack-overflows:

let splitList list = List.foldBack (fun x (l,r) -> x::r, l) list ([],[])

Problem

I would like to make a function that accepts a list and returns two lists: the first contains every odd item, and the second contains every even item. For example, given `[1;2;4;6;7;9]`, I would like to return `[ [1;4;7] ; [2;6;9] ]`. I have written this so far and I do not know how to progress. ``` let splitList list = let rec splitOdd oList list1 list2 = match oList with | [] -> [] | head :: tail -> splitEven tail (list1::head) list2 and splitEven oList list1 list2 = match oList with | [] -> [] | head :: tail -> splitOdd tail list1 (list2::head) splitOdd list [] [] ```

Original source