6.13. kink/KONT_TAG

タグ付き限定継続のshift/reset操作を提供する。

shift/resetの対を使うことで、継続が関数として抜き出せる。例:

shiftが呼ばれなければ、resetは$thunkの結果を戻す。

kont_tagのメソッドは抽象命令列を使って説明される。抽象命令列と抽象スタックマシンについては「言語仕様」 → 「評価」の節を見よう。

6.13.1. kont_tag型

kont_tagは限定継続の区切りである。

6.13.1.1. Kont_tag.reset($thunk)

resetは、継続をKont_tagで区切る。

resetの末尾では、次の抽象命令列が評価される:

事前条件

$thunkはサンクでなければならない。

6.13.1.2. Kont_tag.shift($abort)

shiftはKont_tagで区切られた継続関数を作り、Kont_tagまで移動し、その継続関数を引数として$abortを呼び出す。

shiftの末尾では、次の抽象命令列が評価される:

事前条件

Kont_tag.can_shift? == true

$abortは継続関数を採る関数でなければならない。

6.13.1.3. Kont_tag.can_shift?

can_shift?は、現在のスタックで、Kont_tagに対してshiftが呼び出せるかどうかを戻す。

can_shift?の末尾では、次の抽象命令列が評価される:

6.13.2. KONT_TAG.new

newは、新しいkont_tagを戻す。

6.13.3. KONT_TAG.is?(Val)

is?は、Valがkont_tagであるかどうかを戻す。