ちょっとした学習演習として、Clojureでオーバーハンドシャッフルを実装しようとしています
だから私はこのコードを持っています...
(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)
また、補足として、これはこの関数をインデント/整理するための本当に醜い方法のように感じますが、もっと明白な方法はありますか?