Fenêtre coulissante sur seq
Question
Dans Clojure, quel serait le moyen le plus agréable d’avoir une fenêtre glissante sur un seq (fini, pas trop grand)? Devrais-je simplement utiliser drop
et prendre
et garder une trace de l'index actuel ou y a-t-il un moyen plus agréable de me manquer?
La solution
Je pense que la partition avec l'étape 1 le fait:
user=> (partition 3 1 [3 1 4 1 5 9])
((3 1 4) (1 4 1) (4 1 5) (1 5 9))
Autres conseils
Si vous souhaitez utiliser les fenêtres, il peut également être pratique de le faire avec la carte:
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)
Je ne savais pas que la partition
pourrait le faire, alors je l'ai implémenté de cette façon
(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))))))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow