【发布时间】:2012-03-28 07:47:00
【问题描述】:
对于clojure 来说我还是很陌生,我仍然在为它的功能而苦苦挣扎。如果我有 2 个列表,比如“1234”和“abcd”,我需要创建所有可能的长度为 4 的有序列表。我想要的输出长度为 4:
("1234" "123d" "12c4" "12cd" "1b34" "1b3d" "1bc4" "1bcd"
"a234" "a23d" "a2c4" "a2cd" "ab34" "ab3d" "abc4" "abcd")
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))))
输出将是上述 16 个有序列表中的 1 个。两个输入列表中的每一个都将始终具有相同的长度,例如 2,3,4,5,最多可以说 2^38 或在可用 ram 内。在上面的函数中,我尝试修改它以生成所有有序列表,但失败了。希望有人可以帮助我。谢谢。
【问题讨论】:
标签: list clojure combinations