- 619 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:36:03 ]
- 束縛関係の解決と評価(この場合は変数参照)は違います。
束縛関係の解決とは C言語風に言えば「変数名がどのアドレスを指すかを確定する事」であり 実際にそのアドレスから値を読み込む事ではありません。 マクロ置換に於いては syntax-rulesの第一引数のリストに列挙されている識別子のみ アドレスも使ったマッチングが行われます。 syntax-rules ()のように識別子が無い場合はアドレスはマッチングに利用されません。 アドレスはマッチング、すなわちどの置換パターンを利用するかを決定するのにのみ利用されるだけです。 そして置換された後の式によって変数が参照されるかどうか決まります。 この場合は置換後の式が(set! variable newValue)なのでvariableは評価されません。 set!の第2引数は評価されるのでnewValueが変数参照されて900となります。 しかし置換後の式が例えば(+ variable newValue)ならば手続き呼出しですので +が変数参照されて#<procedure +>に variableが変数参照されて200に newValueが変数参照されて900に評価されてから 手続きが呼び出されます。
|

|