Generators in Chicken Scheme

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

http://ideone.com/mlICuf http://ideone.com/mlICuf

(define-syntax define-generator
  (lambda (x)
    (syntax-case x (lambda)
      ((stx name (lambda formals e0 e1 ...))
         (with-syntax ((yield (datum->syntax-object (syntax stx)  yield)))
           (syntax (define name
             (lambda formals
               (let ((resume #f) (return #f))
                 (define yield
                   (lambda args
                     (call-with-current-continuation
                      (lambda (cont)
                        (set! resume cont)
                        (apply return args)))))
                 (lambda ()
                   (call-with-current-continuation
                    (lambda (cont)
                      (set! return cont)
                      (cond (resume (resume))
                      (else (let () e0 e1 ...)
                            (error  name "unexpected return"))))))))))))
        ((stx (name . formals) e0 e1 ...)
          (syntax (stx name (lambda formals e0 e1 ...)))))))

(define-generator (test-gen)
  (yield 1)
  (yield 2)
  (yield 3))

(define t (test-gen))
(display (t)) (newline)
(display (t)) (newline)
(display (t)) (newline)
(display (t)) (newline)

Answers

http://wiki.call-cc.org/eggref/3/syntax-case http://wiki.call-cc.org/eggref/3/syntax-case

So, in order to test on ideone, you re going to have to convert your macro to an explicit-renaming one.

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/31683997/generators-in-chicken-scheme

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils