R6RS:翻訳:Rationale:Expansion process

R6RS:翻訳:Rationale:Expansion process

10 章 展開処理

R6RS におけるマクロ展開の説明は R5RS のそれよりもより一層複雑になっている。ひとつには、R5RS のマクロ展開の仕様がいくつかの重要な点で曖昧であったからである。例えば、R5RS では define が束縛形式であるとは規定していない。また、マクロの定義がその使用に先立たなければならないのかどうかも不明確であった。使用可能な束縛の集合によりマクロ展開中の照合処理が影響を受けるという事実もさらに事態を複雑にしていた。R6RS で明示したアルゴリズムは、これらの事柄に対処するもっとも単純な展開戦略のひとつである。このアルゴリズムには、ソースコードの各サブフォームを一度しか走査しないという利点もある。

展開処理の方法を明確に述べたことにより、再帰的な場合、即ち、あるマクロの使用が、その後のそのマクロを使用している部分の展開に影響を与えるような定義に展開され、それによりプログラムに混乱を招くことがある、というような規定は避けられるようになった。処理系はそのような場合を検知し、構文違反を検知すべきことになったのである。

More ...