4

returnScheme 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)

これどうやってするの?

4

1 に答える 1

5

編集:質問を読み間違えました。

実際、非常に簡単です:)

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

はこちら

注:非衛生的なマクロからの構文でラップする場合を除き、これを一般化することはできません。

于 2012-08-20T10:53:59.720 に答える