Asl*_*986 4 scheme continuations callcc
我正在尝试return在Scheme R6RS中实现一个函数.我想要这样的东西:
(lambda ()
(do-some-job-before)
(return some-value)
(do-some-job-after))
Run Code Online (Sandbox Code Playgroud)
执行(do-some-job-before),不执行 (do-some-job-after)和lambda函数的最终值some-value.
我想我必须继续使用.我试过了:
(define return #f)
(call/cc (lambda (k)
(set! return k)))
Run Code Online (Sandbox Code Playgroud)
但它不起作用; 例如
(+ 2 (return 3)) ; -> 3 (and not 5 as I expected)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
编辑:误读问题.
事实上很容易:)
(call/cc
(lambda (return)
(printf "before\n")
(return 3)
(printf "after\n")))
Run Code Online (Sandbox Code Playgroud)
这里的例子.
注意:您不能概括这一点,除非您从不卫生的宏中将其包装在语法中.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |