次の2つのコードの違いが気になります:
(define cont2 #f)
(call/cc (lambda (k) (set! cont2 k)))
(display "*")
(cont2 #f)
と
(let [(cont #f)]
(call/cc (lambda (k) (set! cont k)))
(display "*")
(cont #f))
私の意見では、これら 2 つのプログラムの正しい動作は、'*' を無限に出力することです。ただし、最初のものは '*' を 1 つだけ出力して終了しますが、2 番目のものは正しい動作を示します。
だから私は混乱しています。何か特別なことをされているのでしょうdefine
か、それとも続きが思っていたものと違っていたのでしょうか。
別の推測では、環境の最上位は次のように特別に扱われます。
(define (test)
(define cont2 #f)
(call/cc (lambda (k) (set! cont2 k)))
(display "*")
(cont2 #f))
(test)
これは機能しますが、なぜですか?
ご協力ありがとうございました!