- 589 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:55:31 ]
- R5RSの3.1によれば
構文の型の名前は全て構文に束縛されていて構文キーワードである 変数とは構文キーワードでない任意の識別子である(elseと=>も構文キーワードだから変数でない) またR5RSの4・5章によれば defineは (define <変数> <式>) (define (<変数> <仮引数部>) <本体>) (define (<変数> . <仮引数>) <本体>) のいずれか set!は (set! <変数> <式>) lambdaは (lambda <仮引数部> <本体>) 但し<仮引数部>は(<変数1> ...)、<変数>、(<変数1> ... <変数n> . <変数n+1>)のいずれか てことは構文キーワードをを隠蔽するローカル変数あるいはトップレベル変数をdefine、set!、lambda、let、let*、letrec、doで作る事はR5RS外だったんだ 構文キーワードの変数参照がR5RS外って事は知ってたけどこの事は知らなかった だけど4.3にはローカル変数束縛がキーワード束縛を隠蔽しても良いって書いてあるけど どうすれば構文キーワードを隠蔽できるローカル変数束縛ができるの? 他方、構文束縛は変数でなく識別子に対して行われるからローカル構文束縛で隠蔽されることはあり得る。 7.2.1の抽象構文に於いては変数と識別子が同一されているから<変数>の解釈が2パターンあるってオチなんだろうけど
|

|