[back]

Permutations

Implement the function

val permutations : 'a list -> 'a list list

so that permutations l is a list of all permutations of l.

Examples

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