我正在尝试在Scheme R6RS中实现return
函数。我想要这样的东西:
(lambda ()
(do-some-job-before)
(return some-value)
(do-some-job-after))
执行(do-some-job-before)
,不执行(do-some-job-after)
以及some-value
中lambda函数的最终值。
我想我必须继续使用。我试过了:
(define return #f)
(call/cc (lambda (k)
(set! return k)))
但它不起作用; e.g
(+ 2 (return 3)) ; -> 3 (and not 5 as I expected)
我该怎么做?
答案 0 :(得分:5)
已编辑:误读了问题。
事实上非常容易:)
(call/cc
(lambda (return)
(printf "before\n")
(return 3)
(printf "after\n")))
示例here。
注意:除非您从不卫生的宏中将其包装在语法中,否则无法对此进行概括。