Clojure 滑动窗口在seq上

Clojure 滑动窗口在seq上,clojure,window,sliding,seq,Clojure,Window,Sliding,Seq,在Clojure中,在一个(有限的,不太大的)seq上有一个滑动窗口的最好方式是什么?我应该只使用drop和take跟踪当前索引,还是缺少更好的方法?我认为第一步可以做到: user=> (partition 3 1 [3 1 4 1 5 9]) ((3 1 4) (1 4 1) (4 1 5) (1 5 9)) 如果要在windows上操作,也可以方便地使用map执行此操作: user=> (def a [3 1 4 1 5 9]) user=> (map (partial

在Clojure中,在一个(有限的,不太大的)seq上有一个滑动窗口的最好方式是什么?我应该只使用
drop
take
跟踪当前索引,还是缺少更好的方法?

我认为第一步可以做到:

user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))

如果要在windows上操作,也可以方便地使用map执行此操作:

user=> (def a [3 1 4 1 5 9])
user=> (map (partial apply +) (partition 3 1 a))
(8 6 10 15)
user=> (map + a (next a) (nnext a))
(8 6 10 15)

我不知道
分区
可以做到这一点,所以我用这种方式实现了它

(defn sliding-window [seq length]
  (loop [result ()
         remaining seq]
    (let [chunk (take length remaining)]
      (if (< (count chunk) length)
        (reverse result)
        (recur (cons chunk result) (rest remaining))))))
(defn滑动窗口[序列长度]
(循环[结果()
其余[序号]
(让[区块(取剩余长度)]
(如果(<(计数块)长度)
(结果相反)
(重复出现(结果)(剩余部分(()())))