(define (every cnt seq)
(if (empty? seq)
empty-stream
(let ([head (first seq)]
[tail (with-handlers
([exn:fail?
(λ (exn)
empty-stream)])
(drop cnt seq))])
(stream-cons head (every cnt tail)))))
(take 10 (every 5 (naturals)))
;; evens
(take 10 (every 2 (naturals)))
;; odds
(take 10 (every 2 (naturals 1)))
;; with an offset
(take 10 (every 7 (drop 100 (naturals))))
;; together with subsequence for start, stop, step
(every 3 (subsequence (naturals) 10 20))
;; in vector
(every 3 #(1 2 3 4 5 6 7 8 9 10))
'(0 5 10 15 20 25 30 35 40 45)
>
'(0 2 4 6 8 10 12 14 16 18)
>
'(1 3 5 7 9 11 13 15 17 19)
>
'(100 107 114 121 128 135 142 149 156 163)
>
'(10 13 16 19)
>
'(1 4 7 10)