Scheme 鸡只发电计划

Scheme 鸡只发电计划,scheme,chicken-scheme,Scheme,Chicken Scheme,此代码在提供的Racket Scheme中工作,在显示消息“意外返回”之前,在连续行上显示数字1、2和3,但在使用Chicken Scheme时相同的代码失败,我不理解Chicken Scheme提供的错误消息。我怎样才能使它与鸡计划的工作 (define-syntax define-generator (lambda (x) (syntax-case x (lambda) ((stx name (lambda formals e0 e1 ...)) (

此代码在提供的Racket Scheme中工作,在显示消息“意外返回”之前,在连续行上显示数字1、2和3,但在使用Chicken Scheme时相同的代码失败,我不理解Chicken Scheme提供的错误消息。我怎样才能使它与鸡计划的工作

(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)
Chicken需要加载以支持
语法大小写
。但是,ideone没有安装该egg,因此您不能在那里使用它


因此,为了在ideone上进行测试,您必须将宏转换为显式重命名宏。

更正:ideone运行CHICKEN 4.9,语法大小写egg不可用(这是一个遗留的CHICKEN 3 egg)。@Sjaman感谢您的更正!在4.9中有没有办法使用
语法大小写
,如果有,如何使用?@chrisjester-young不幸的是,(目前)没有办法这样做。语法大小写令人难以置信地毛茸茸的。它只有两个可移植的实现,并且都包含了方案的整个宏和模块系统。这意味着你不能使用它们,除非你允许它们接管一切。我们在CHICKEN 3中使用了psyntax实现,这很好,因为CHICKEN 3没有自己的模块/宏系统。也许可以在CHICKEN中使用ER/IR宏实现语法case,但还没有人敢尝试。