seq上のスライディングウィンドウ
質問
Clojureでは、(有限で、大きすぎない)シーケンス上にスライディングウィンドウを配置する最も良い方法は何でしょうか? drop
と take
を使用して現在のインデックスを追跡する必要がありますか、それとももっと不足している方法がありますか?
解決
ステップ1のパーティションはそれを行うと思います:
user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))
他のヒント
ウィンドウで操作する場合は、マップを使用してこれを行うことも便利です。
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)
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))))))
所属していません StackOverflow