Scheme 实现一个返回函数

Scheme 实现一个返回函数,scheme,continuations,callcc,Scheme,Continuations,Callcc,我试图在Scheme R6RS中实现返回函数。我想要这样的东西: (lambda () (do-some-job-before) (return some-value) (do-some-job-after)) 执行(之前执行一些作业),不执行(之后执行一些作业)以及某些值中lambda函数的最终值 我想我得用一个连续体。我试过: (define return #f) (call/cc (lambda (k) (set! return k))) 但它不起作用

我试图在Scheme R6RS中实现
返回
函数。我想要这样的东西:

(lambda ()
  (do-some-job-before)
  (return some-value)
  (do-some-job-after))
执行
(之前执行一些作业)
,不执行
(之后执行一些作业)
以及
某些值中lambda函数的最终值

我想我得用一个连续体。我试过:

(define return #f)
(call/cc (lambda (k)
           (set! return k)))
但它不起作用;e、 g

(+ 2 (return 3)) ; -> 3 (and not 5 as I expected)

我该怎么做?

编辑:误读问题

其实很简单:)

例如


注意:你不能概括这一点,除非你用一个不卫生的宏的语法来包装它。

谢谢你的回答,但这不是我需要的。我不希望执行清理部分。@Aslan986:跳过动态风位,很抱歉我误读了您的问题:)编辑答案。@Aslan986:您的示例不太清楚您为什么要这样做。@Ieppie:我想这样做:。(我知道我可以轻松地完成这项工作)。我需要一个C风格的
return
函数。@Aslan986:不幸的是,IronScheme没有完整的延续,所以我不能真正测试它或建议一个工作示例,除非我转到其他方案。我假设在某些语言中,您需要类似于
yield
的无限生成器。正如您所说,使用闭包是正常的方法,也是我将使用的方法。
(call/cc 
  (lambda (return)
    (printf "before\n")
    (return 3)
    (printf "after\n")))