Ral*_*lph 6 sequences clojure playing-cards
我是一个Clojure新手.我想获得两份卡套装的副本.我能想到的非DRY方式是
(def suits [:clubs :diamonds :hearts :spades])
(def two-times (concat suits suits))
Run Code Online (Sandbox Code Playgroud)
必须有更多功能的方式(即使它需要更多的字符:-)).如果我想要N次怎么办?有什么建议?
我试过的所有事情,比如
(replicate 2 suits)
Run Code Online (Sandbox Code Playgroud)
导致两个单独的向量:
([:clubs :diamonds :hearts :spades] [:clubs :diamonds :hearts :spades])
Run Code Online (Sandbox Code Playgroud)
如何"压扁"结构?
concat给你一个懒惰的seq.如果你想最终得到一个(非懒惰)向量:
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]
Run Code Online (Sandbox Code Playgroud)
根据您是通过索引大量访问它还是迭代它,向量或seq可能更合适.
cycle如果你想要一个重复元素的无尽(懒惰)流,那也总是如此:
user> (take 9 (cycle suits))
(:clubs :diamonds :hearts :spades :clubs :diamonds :hearts :spades :clubs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |