少しお尋ねしたいことがあります。

(def coll (range 100) )
(loop [x coll r [] ] (if (not= x nil) (recur (next x) (cons (first x) r) ) r))

としたときにxはシーケンスcollを走査しますが、
xが以前操作した任意の数n個のデータにアクセスしたいというとき

具体的には xが55を指しているときにそれ以前の54,53,52,51 ... 45 (ここではn=10とした)
にアクセスしたいのですが、エレガントな方法ってあるでしょうか。

自分が思いついた方法
1.partitionにシーケンスを食わせてからloopに突っ込む
しかしできればloop recur内で生成したい。
2.drop take を使ってcollをloop内で刻む
partitionを使わないとなるとこれしかないのかな