R6RS:翻訳:Standard Libraries:12.3 Transformers

R6RS:翻訳:Standard Libraries:12.3 Transformers

12.3 変換子

define-syntax (R6RS:翻訳:R6RS:Definitions?), let-syntax, letrec-syntax フォーム(R6RS:翻訳:R6RS:Binding constructs for syntactic keywords?)では、構文キーワードの束縛は変換子へと評価される式である。

変換子には変換手続きと変数変換子とがある。 変換手続きは入力にあたるラップされた構文オブジェクト(R6RS:翻訳:Standard Libraries:12.2 Syntax objects 節参照)をひとつ引き数として受け取り、出力をあらわす構文オブジェクト(R6RS:翻訳:Standard Libraries:12.2 Syntax objects 節参照)を返す。 この変換手続きは対応するキーワードへの参照があると展開器から呼び出される。 キーワードがリスト形式の入力フォームの先頭部分にあらわれた場合、変換手続きはリスト構造全体を引き数として受け取り、その出力でフォーム全体を置き換える。変数変換子の場合はこの限りでない(下記参照)。キーワードがほかの定義の文脈や式の文脈であらわれた場合、変換子はそのキーワードの参照だけをあらわすラップされた構文オブジェクトを受け取り、出力はその参照だけを置き換える。変数変換子の場合を除き、キーワードが set! 式の左辺に現れた場合は、&syntax コンディション型とともに例外が通知される。

(make-variable-transformer proc) procedure

proc はラップされた構文オブジェクトをひとつ引き数として取り、構文オブジェクトをひとつ返す。

make-variable-transformer 手続きにより変数変換子が生成される。変数変換子はふつうの変換子とほぼ同じであるが、変数変換子に対応づけられたキーワードが set! 式の左辺に現れた場合にも例外が通知されない。代わりに、 set! 式全体を表す構文オブジェクトを引き数として proc が呼び出され、その戻り値が set! 式全体と置き換えられる。

Implementation responsibilities: The implementation must check the restrictions on proc only to the extent performed by applying it as described. An implementation may check whether proc is an appropriate argument before applying it.


Last modified : 2008/03/02 23:40:51 UTC