小编Bri*_*ian的帖子

clojure - 有序的2个列表的成对组合

作为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内.在上面的函数中,我试图修改它以生成所有有序列表但失败了.希望有人可以帮助我.谢谢.

combinations list clojure

4
推荐指数
2
解决办法
1677
查看次数

标签 统计

clojure ×1

combinations ×1

list ×1