UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture15/ odds2.rkt
#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)