For Development HEAD DRAFTSearch (procedure/syntax/module):

11.43 srfi.190 - コルーチンジェネレータ

Module: srfi.190

このモジュールは、ジェネレータを元にしたコルーチンの定義を簡単にするマクロ coroutine-generatorを提供します。

Macro: coroutine-generator body …

[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はレキシカル変数ではなく構文パラメータであることです (構文パラメータ参照)。

Macro: yield

[SRFI-190]{srfi.190} coroutine-generatorの中では、制御を譲る手続きへと評価される 構文パラメータです。coroutine-generatorで使われた場合はエラーとなります。

Macro: define-coroutine-generator name body …
Macro: define-coroutine-generator (name . formals) body …

[SRFI-190]{srfi.190} それぞれ以下の形式の略記です。

(define name (coroutine-generator body ...))

(define (name . formals) (coroutine-generator body ...))


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT