作为clojure的新手,我仍在努力完成其功能.如果我有2个列表,说"1234"和"abcd"我需要制作长度为4的所有可能的有序列表.我想要的长度为4的输出是:
("1234" "123d" "12c4" "12cd" "1b34" "1b3d" "1bc4" "1bcd"
"a234" "a23d" "a2c4" "a2cd" "ab34" "ab3d" "abc4" "abcd")
Run Code Online (Sandbox Code Playgroud)
其中2 ^ n的数量取决于输入.
我编写了以下函数来通过随机遍历生成单个字符串/列表.参数[par]就像["1234""abcd"]
(defn make-string [par] (let [c1 (first par) c2 (second par)] ;version 3 0.63 msec
(apply str (for [loc (partition 2 (interleave c1 c2))
:let [ch (if (< (rand) 0.5) (first loc) (second loc))]]
ch))))
Run Code Online (Sandbox Code Playgroud)
输出将是上面16个有序列表中的1个.两个输入列表中的每一个将始终具有相等的长度,例如2,3,4,5,最多说2 ^ 38或在可用的ram内.在上面的函数中,我试图修改它以生成所有有序列表但失败了.希望有人可以帮助我.谢谢.