2009-09-15 13 views
13

En Clojure, ¿cuál sería la mejor manera de tener una ventana deslizante sobre un seq (finito, no demasiado grande)? ¿Debería simplemente usar drop y take y hacer un seguimiento del índice actual o hay una manera más agradable en la que me estoy perdiendo?Ventana deslizante sobre la secuencia

Respuesta

20

creo que partition con el paso 1 lo hace:

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

Si desea operar en las ventanas, también puede ser conveniente de hacer esto con el mapa:

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) 
Cuestiones relacionadas