«Синтаксический сахар»:
Можно определить ключевые
слова для рамочных конструкций;
IF (I > 0) THEN BEGIN
A = 1;
B = 2
END
|
затем написать текст, похожий на Pascal-программу.
|
#DEFINE MAX(A, B) ((A) > (B) ? (A) : (B))
|
Макрос:
Такое определение обеспечивает функцию «максимум», которая реализуется как
последовательный код, а не вызов
функции.
|
X = MAX(P+Q, R+S);
|
Макровызов:
|
|
При правильном объявлении аргументов такой макрос будет работать с любыми типами
данных.
|
X = ((P+Q) > (R+S) ? (P+Q) : (R+S));
|
Результат макроподстановки: Нет необходимости в различных видах MAX для данных разных типов, как это было бы с
функциями
|
Пример 11. Пример макросов языка C
Определения
|
Примечание
|
(defun MF (NF AF BF)
(list ‟DEFUN NF AF BF)
)
|
Макрос
|
(eval (MF MNF (A B) (cons B A)))
|
Макровызов
|
(MNF 1 2)
|
Применение результата
|
Пример 12. Пример макротехники на языке Lisp
Основные отличия АМ макрогенератора от АМ ассемблера и стековой машины связаны с переходом от обработки простых значений, размещаемых в словах фиксированного размера, к открытой обработке строк произвольной длины и с использованием программируемых определений, расширяющих исходную систему команд и поддерживающих локализацию переменных.
Таблица 21
Do'stlaringiz bilan baham: |