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

但它不起作用;例如
(+ 2 (return 3)) ; -> 3 (and not 5 as I expected)

我怎样才能做到这一点?

最佳答案

编辑: 误读问题。

事实上很容易:)

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

示例 here

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

关于scheme - 实现返回函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12036259/

10-14 11:51
查看更多