0

(callcc (fun k -> k 7)) + 3
(callcc (fun k -> 7)) + 3

これらはそれぞれ何を評価し、その理由は何ですか?

4

1 に答える 1

2

これは宿題だと思います。そうでない場合は、そう言ってください。答えを直接お伝えします。

この方法call/ccでは、呼び出された時点で継続をキャプチャします。これらの例でそれが意味することは、 が表示されたときにcall/cc、呼び出し全体をブラック ボックスに置き換えて、残っているものを確認することです。

(call/cc (fun k -> k 7)) + 3
=>
************************ + 3

呼び出し+ 3の結果も同様call/ccです。この「次に起こること」は、call/ccパッケージ化してk*.

kここで必要なのは、値 7 で呼び出すとどうなるかを理解することだけです。

2 番目の例では、まったく呼び出しませんk。で特別なことをするわけではないので、特別なkことを期待call/ccするべきではありません。


注: あなたが与えるコードは、ある種の ML のように見えます。私が知っている ML の方言にcall/ccは. 構文を理解するのはそれほど難しくありません。

*'continuation' は、「次に何が起こるか」を言うのに少し良い方法ですが、それほど良い方法ではありません。

于 2010-05-13T18:17:48.623 に答える