实现返回功能

时间:2012-08-20 10:44:41

标签: scheme continuations callcc

我正在尝试在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)

我该怎么做?

1 个答案:

答案 0 :(得分:5)

已编辑:误读了问题。

事实上非常容易:)

(call/cc 
  (lambda (return)
    (printf "before\n")
    (return 3)
    (printf "after\n")))

示例here

注意:除非您从不卫生的宏中将其包装在语法中,否则无法对此进行概括。