特殊フォームとマクロには実際的な違いはありますか? 何が違うのでしょうか?
ベストアンサー1
これらの用語は完全に同義ではありませんが、排他的でもありません (この回答では Scheme を前提としています)。
- あ特別な形式(別名構文) は、関数適用のデフォルト ルールに従って評価されない式です。(デフォルトのルールは、明示的に言えば、
eval
すべての部分式に適用され、次にapply
最初の部分の結果が他の部分式の結果のリストに適用されます。) - のマクロシステム言語自体の中に新しい特殊形式を定義できる言語機能です。大きいマクロシステムを使用して定義された特殊なフォームです。
つまり、「特別な形式」とは、インターフェースまたはセマンティクス一方、「マクロ」は、実装「特殊形式」は「これらの式は特別な規則で評価される」ことを意味し、「マクロ」は「いくつかの式を評価するための特別な規則の実装がここにある」ことを意味します。
lambda
ここで重要なことは、ほとんどの Scheme 特殊フォームは、、およびマクロという非常に小さな基本要素からマクロとして定義できるということですif
。これらのみを提供する最小限の Scheme 実装でも、残りをマクロとして実装できます。最近の Scheme レポートでは、このような特殊フォームをマクロで定義できる「ライブラリ構文」と呼んで区別しています。ただし、実際には、実用的な Scheme システムでは、より豊富なフォーム セットを基本要素として実装することがよくあります。
意味論的に言えば、式に関して重要なのは、その式を評価するためにどのルールが使用されるかであり、そのルールがどのように実装されるかではありません。したがって、その意味では、特殊フォームがマクロとして実装されるかプリミティブとして実装されるかは重要ではありません。しかし、一方で、Scheme システムの実装の詳細は「漏れ」ることが多いため、それを気にすることになるかもしれません...