Термины не совсем синонимы, но они также не являются исключительными (этот ответ предполагает Схему):
- A специальная форма (также известная как синтаксис в отчетах схемы) - это выражение, которое не оценивается в соответствии с правилом по умолчанию для приложения функции. (Правило по умолчанию, просто чтобы быть явным, это
eval
все подвыражения, а затем apply
результат первого в список результатов других.)
- Система макросов - это языковая функция, которая позволяет определять новые специальные формы внутри самого языка. A macro - это специальная форма, определенная с помощью системы макросов.
Таким образом, вы можете сказать, что «специальная форма» - это термин, который относится к interface или семантика , тогда как «макрос» - это термин, который относится к реализация . «Специальная форма» означает «эти выражения оцениваются по специальному правилу», тогда как «макрос» означает «вот реализация специального правила для оценки некоторых выражений».
Теперь важно отметить, что большинство специальных форм Scheme можно определить как макросы из действительно небольшого ядра примитивов: lambda
, if
и макросов. Минимальная реализация Scheme, которая обеспечивает только это, может все еще реализовывать как макросы; В недавних отчетах о схемах это различие проводится путем ссылки на такие специальные формы, как «синтаксис библиотеки», который можно определить в терминах макросов. На практике, однако, практические системы Scheme часто реализуют более богатый набор форм в качестве примитивов.
Семантически говоря, единственное, что имеет значение в выражении, это то, какое правило используется для его оценки, а не то, как это правило реализовано. Поэтому в этом смысле не важно, реализована ли специальная форма в виде макроса или примитива. Но, с другой стороны, детали реализации системы Scheme часто «просачиваются», так что вы можете позаботиться об этом ...