srfi.190 - コルーチンジェネレータ ¶このモジュールは、ジェネレータを元にしたコルーチンの定義を簡単にするマクロ
coroutine-generatorを提供します。
[SRFI-190]{srfi.190}
ジェネレータ手続きを返します。作られたジェネレータ手続きは、最初に呼ばれると
bodyを最初から順に実行します。
bodyの中に構文yieldが現れた場合、
それは制御を譲る手続き(yielding procedure)に評価され、
それが呼ばれるとbodyの残りの部分の継続が保存されて制御がジェネレータの
呼び出し元に戻ります。ジェネレータが再び呼ばれると、保存されていた継続が再起動されます。
bodyの最後の式の評価が終わると、
ジェネレータからEOFが返されてジェネレータの終端となります。
coroutine-generatorとほぼ同じことは、
make-coroutine-generatorを使って制御を譲る手続きを受け取る変数を明示
することでも実現できます(ジェネレータの生成参照)。
(make-coroutine-generator (lambda (yield) body ...))
違いは、このSRFIではyieldはレキシカル変数ではなく構文パラメータであることです (構文パラメータ参照)。
[SRFI-190]{srfi.190}
coroutine-generatorの中では、制御を譲る手続きへと評価される
構文パラメータです。coroutine-generatorで使われた場合はエラーとなります。