#lang racket
(require racket/generator)
(define nats
(generator ()
(let ([n 0])
(define (loop)
(yield n)
(set! n (add1 n))
(loop))
(loop))))
(define odds
(generator ()
(define (odds-loop)
(let ([n (nats)])
(when (odd? n)
(yield n))
(odds-loop)))
(loop)))
(odds) (odds) (odds) (odds) (odds)