質問

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))))))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top