4

我正在尝试return在 Scheme R6RS 中实现一个功能。我想要这样的东西:

(lambda ()
  (do-some-job-before)
  (return some-value)
  (do-some-job-after))

执行(do-some-job-before),不执行 (do-some-job-after)和 lambda 函数的最终值some-value

我想我必须使用延续。我试过了:

(define return #f)
(call/cc (lambda (k)
           (set! return k)))

但它不起作用;例如

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

我怎样才能做到这一点?

4

1 回答 1

5

编辑:误读的问题。

事实上很容易:)

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

这里的例子。

注意:你不能一概而论,除非你把它包装在一个不卫生的宏的语法中。

于 2012-08-20T10:53:59.720 回答