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