Pile shuffle of a vector
You need loop/recur very rarely in most code, and almost never for operating on collections/sequences.  Using the standard library sequence functions, it’s possible to do the main pile shuffle with just a handful of expressions:

(-&gt;&gt; (range (dec n) -1 -1) (mapcat #(take-nth n (drop % cards))) reverse)


It takes some getting used to, and familiarity with the Clojure standard library.  When I was first getting started, I found it immensely helpful to read the clojure/core.clj code.  It isn’t all idiomatic because it’s building the support for the idioms as it goes, but it demonstrates what Clojure makes possible and how it makes those things possible.