Scheme 实现一个返回函数
我试图在Scheme R6RS中实现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))) 但它不起作用
返回
函数。我想要这样的东西:
(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")))