Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

What's bad about Python?

Name: Anonymous 2005-12-21 8:09

Because I'm learning it, almost done through the tutorial, and it looks great.

Name: >>112 2011-07-27 3:13

>>199,211
I find it cleaner to define a yield procedure, instead of passing it as an argument, but that's doable too.

(define (yield . xs)
  (shift k (cons k xs)))

(define ((generator f) . xs)
  (reset (apply f xs) #f))

(define ((generator/yield-arg f) . xs)
  (reset (f yield) #f))

(define ((fioc-generator-of gen) f)
  (let ((g (gen f)))
    (lambda ()
      (let ((next (g)))
        (set! g (car next))
        (apply values (cdr next))))))

(define fioc-generator (fioc-generator-of generator))
(define fioc-generator/yield-arg (fioc-generator-of generator/yield-arg))

(define g
  (fioc-generator
   (lambda ()
     (for-each yield '(1 2 3 4)))))

(g) ; 1
(g) ; 2
(g) ; 3

(define g2
  (generator/yield-arg
   (lambda (yield)
     (for-each yield '(1 2 3 4)))))

(g2) ; (cont . (1))
((car (g2))) ; (cont . (2))
((car ((car (g2))))) ; (cont . (3))
((car (g2))) ; (cont . (2))

(define g3
  (fioc-generator/yield-arg
   (lambda (yield)
     (for-each yield '(1 2 3 4)))))

(g3) ; 1
(g3) ; 2
(g3) ; 3

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List