CommonLisp Scheme Part12
レス数が900を超えています。1000を超えると表示できなくなるよ。
0946デフォルトの名無しさん
2005/04/24(日) 00:41:53schemeでシンボルといったら'nameで表されるようなオブジェクト、または
それらの型を言う場合が多い。あなたが言っているものは名前とか識別子と
呼ぶのが適当だ。もし混同していたのなら、これを機に復習してくれ。
識別子には種類が二つあって、それは(defineやlambda式で導入される)変数名
と(define-syntaxやlet-syntaxで導入される)構文キーワード名だ。
これらは同じ名前空間で管理される(別の言い方では同じスコープ規則に
従う)が、扱いは別。
(932が言っているのは、ソースファイルとかモジュールというような概念が
定義されてないschemeにおいて、それらをどう扱うかという話。)
>>933
[1], [2], [3]はなんというか視点がずれてる。
コンパイラ、インタープリタ問わず処理系は (some-operation ...) を処理
するときには二つのsome-operationのバインドのうちどちらかしか見えない
ので、その式を処理する方法は常に一つしか存在しない。
つまり、some-operationを変数名だとみなしたら手続き呼び出しだし、
構文キーワード名だとみなしたらマクロ展開だ。
そういった訳で、940でのあなたの理解は大まかには正しいということに
なる。マクロ展開が先に行なわれるというよりは、マクロ呼び出しだったら
展開するしか処理方法がないということね。
ちなみに通常は、トップレベルで二重に定義された名前は後から定義した方
が以前の定義を(概念的に)上書きするので、 (some-operation ...) は
マクロ呼び出しとして処理することになる(この辺はschemeの仕様書で探して
みたが明確な記述はなかった)。
レス数が900を超えています。1000を超えると表示できなくなるよ。