Schiebefenster über seq
Frage
In Clojure, was wäre die schönste Art und Weise ein Schiebefenster über einen (endlichen, nicht zu groß) seq zu haben? Sollte ich nur drop
und take
und behalten den aktuellen Index oder gibt es eine schönere Art, wie ich bin fehlt?
Lösung
Ich denke, dass Partition mit Schritt 1 tut es:
user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))
Andere Tipps
Wenn Sie an den Fenstern arbeiten wollen, kann es auch zweckmäßig sein, das mit der Karte zu tun:
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)
Ich wusste nicht, partition
dies tun könnte so implementiert ich es auf diese Weise
(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))))))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow