2

教授が例として使用したこのコードを理解するのに問題があります。

(define saved-cont #f)  

(define (test-cont)
     (let ((x 0))
      (call/cc
       (lambda (k)     
        (set! saved-cont k))) 

      (set! x (+ x 1))
      (display x)
      (newline)))

初めて実行する場合、(test-cont)何がk含まれていますか?

注:私はR6RSスキームを使用しています。

4

1 に答える 1

1

call/cc現在の継続を唯一の引数として指定された関数を呼び出します。したがって、kこれが現在の続きです。値を指定して呼び出すと、指定した値でcall/cc戻ります。(ただし、call/cc上記のコードではの戻り値を使用しておらず、その場合はR6RSでゼロ値の戻り値が許可されるため、saved-cont引数なしで呼び出すだけで、期待どおりの処理を実行できます。)

ここでは、基本的に、を呼び出すたびに、(saved-cont)以下のコードcall/ccが再度実行されます。したがって、xはインクリメントし、その新しい値が表示されます。

于 2012-04-30T14:04:37.050 に答える