user> (use 'clojure.contrib.combinatorics)
user> (cartesian-product ["A" "B"] ["a" "b"])
(("A" "a") ("A" "b") ("B" "a") ("B" "b"))
user> (cartesian-product ["A" "B"] ["a" "b"] [1 2])
(("A" "a" 1) ("A" "a" 2) ("A" "b" 1) ("A" "b" 2) ("B" "a" 1) ("B" "a" 2) ("B" "b" 1) ("B" "b" 2))
user> (use 'clojure.contrib.combinatorics)
user> (cartesian-product ["A" "B"] ["a" "b"])
(("A" "a") ("A" "b") ("B" "a") ("B" "b"))
user> (cartesian-product ["A" "B"] ["a" "b"] [1 2])
(("A" "a" 1) ("A" "a" 2) ("A" "b" 1) ("A" "b" 2) ("B" "a" 1) ("B" "a" 2) ("B" "b" 1) ("B" "b" 2))