我正在尝试在 Clojure 中实现Overhand Shuffle作为一个学习练习
所以我有这个代码......
(defn overhand [cards]
(let [ card_count (count cards)
_new_cards '()
_rand_ceiling (if (> card_count 4) (int (* 0.2 card_count)) 1)]
(take card_count
(reduce into (mapcat
(fn [c]
(-> (inc (rand-int _rand_ceiling))
(take cards)
(cons _new_cards)))
cards)))))
它非常接近于做我想做的事,但它反复从前面拿走第一个(随机)N张卡片,但我希望它在列表中前进......
称为
(overhand [1 2 3 4 5 6 7 8 9])
而不是以
(1 2 3 1 2 1 2 3 4)
我想结束
(7 8 9 5 6 1 2 3 4)
另外,作为一个旁注,这感觉像是一种非常丑陋的缩进/组织这个函数的方式,有没有更明显的方式?