[back]

Sublists

A sublist of a list l is a list containing a sequence of the elements in l, in the same order as they appear in l, e.g., [1;2], [2;3], [], and [1;3] are sublists of the list [1;2;3].

Implement the function

val sublists : 'a list -> 'a list list

so that sublists l is the list of all sublists of l.

Examples

let _ = assert (sublists [] = [[]])
let _ = assert (List.length (sublists [1]) = 2)
let _ = assert (List.mem [] (sublists [1]))
let _ = assert (List.mem [1] (sublists [1]))
let _ = assert (List.length (sublists [1;2;3]) = 8)
let _ = assert (List.mem [1;2] (sublists [1;2;3]))
let _ = assert (List.mem [2;3] (sublists [1;2;3]))
let _ = assert (List.mem [1;3] (sublists [1;2;3]))
let _ = assert (List.mem [] (sublists [1;2;3]))