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?

Était-ce utile?

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
scroll top