我是clojure的新手。我面临的一个问题是从多个集合中找到特殊列表。
来源清单:(1 c 2 b 4 e a f)
在源列表中找到的列表:(a 1),(1a),(4 c),(f 2)
如何解决? 感谢
答案 0 :(得分:2)
查看https://github.com/clojure/math.combinatorics
=> (combo/cartesian-product [1 2] [3 4])
((1 3) (1 4) (2 3) (2 4))
答案 1 :(得分:0)
如果我对问题的理解是正确的并且你不介意暴力,你可以使用这个解决方案。
(let [list1 '#{1 2 3 4 5}
list2 '#{a b c d e f}
source '(1 c 2 b 4 e a f)]
(for [x source
y source
:when (or (and (list1 x) (list2 y))
(and (list1 y) (list2 x)))]
[x y]))
=>
([1 c] [1b] [1 e] [1 a] [1 f] [c 1] [c 2] [c 4] [2 c] [2 b] [2 e] [2 a] [2 f] [b 1] [b 2] [b 4] [4 c] [4 b] [4 e] [4 a] [4 f] [e 1] [e 2] [e 4] [a 1] [a 2] [a 4] [f 1] [f 2] [f 4])
你也可以使用shuffle来引入一些随机性,并使用take n来获取你需要的样本。
或者为了使其更简单,只需从list1和list2中删除不在源中的项目并循环遍历这些过滤后的列表。