17

在 Clojure 中,在(有限的,不太大的)seq 上设置滑动窗口的最佳方式是什么?我应该只使用droptake跟踪当前索引还是我错过了更好的方法?

4

3 回答 3

29

我认为第 1 步的分区可以做到:

user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))
于 2009-09-15T17:05:52.650 回答
3

如果你想在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)
于 2009-09-16T00:52:05.783 回答
0

我不知道partition可以这样做,所以我以这种方式实现了它

(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))))))
于 2019-06-18T08:49:27.480 回答