2009-09-15 6 views
13

In Clojure, quale sarebbe il modo migliore per avere una finestra scorrevole su un seq (finito, non troppo grande)? Dovrei semplicemente usare drop e take e tenere traccia dell'indice attuale o c'è un modo più carino che mi manca?Finestra scorrevole sul seq

risposta

20

penso che partition con la fase 1 lo fa:

user=> (partition 3 1 [3 1 4 1 5 9]) 
((3 1 4) (1 4 1) (4 1 5) (1 5 9)) 
3

Se si vuole operare sulle finestre, ma può anche essere conveniente per fare questo con la mappa:

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)