[back]

Pairs

Implement the function

val pairs : 'a list -> ('a * 'a) list

so that pairs l is the list of all distinct ordered pairs (in any order, with repeats) of elements taken from the list l.

Examples

let _ = assert (pairs [] = [])
let _ = assert (pairs [1] = [(1, 1)])
let _ = assert (pairs [1;1] = [(1, 1)])
let _ = assert (List.length (pairs [1;2;3]) = 9)
let _ = assert (List.mem (1, 1) (pairs [1;2;3]))
let _ = assert (List.mem (1, 2) (pairs [1;2;3]))
let _ = assert (List.mem (1, 3) (pairs [1;2;3]))
let _ = assert (List.mem (2, 1) (pairs [1;2;3]))
let _ = assert (List.mem (2, 2) (pairs [1;2;3]))
let _ = assert (List.mem (2, 3) (pairs [1;2;3]))
let _ = assert (List.mem (3, 1) (pairs [1;2;3]))
let _ = assert (List.mem (3, 2) (pairs [1;2;3]))
let _ = assert (List.mem (3, 3) (pairs [1;2;3]))