我是Clojure的新手。我正在尝试获得两张名片套装的副本。我想出的非DRY方法是
(def suits [:clubs :diamonds :hearts :spades])
(def two-times (concat suits suits))
必须有一种更实用的方法(即使它需要更多的字符:-))。如果我要N次怎么办?有什么建议么?
我尝试的所有事情,例如
(replicate 2 suits)
产生两个单独的向量:
([:clubs :diamonds :hearts :spades] [:clubs :diamonds :hearts :spades])
如何“展平”结构?
最佳答案
concat
给您一个懒惰的序列。如果要结束一个(非惰性)向量,请执行以下操作:
user> (into suits suits)
[:clubs :diamonds :hearts :spades :clubs :diamonds :hearts :spades]
user> (reduce into (replicate 2 suits))
[:clubs :diamonds :hearts :spades :clubs :diamonds :hearts :spades]
根据您是通过大量索引访问它还是对其进行迭代,向量或seq可能更合适。
如果您想要无尽的(重复的)重复元素流,那么总是也有
cycle
:user> (take 9 (cycle suits))
(:clubs :diamonds :hearts :spades :clubs :diamonds :hearts :spades :clubs)