return
Scheme R6RS で関数を実装しようとしています。私はそのようなものが欲しい:
(lambda ()
(do-some-job-before)
(return some-value)
(do-some-job-after))
を実行し(do-some-job-before)
、実行しない (do-some-job-after)
で、ラムダ関数の最終的な値をsome-value
.
私は継続を使用する必要があると思います。私は試した:
(define return #f)
(call/cc (lambda (k)
(set! return k)))
しかし、うまくいきません。例えば
(+ 2 (return 3)) ; -> 3 (and not 5 as I expected)
これどうやってするの?