Анафорический макрос - Anaphoric macro
An анафорический макрос это тип макрос программирования который намеренно фиксирует некоторую форму, предоставленную макросу, на которую может ссылаться анафора (выражение, относящееся к другому). Анафорические макросы впервые появились в Пол Грэм с На Лиспе[1] и их имя является ссылкой на лингвистическая анафора[1]- использование слов в качестве замены предшествующих слов.
Примеры
В петля
макрос в ANSI Common Lisp анафоричен в связывании Это
к результату тестового выражения в предложении.[2][3]
Вот пример, который суммирует значение не-ноль
элементы, где Это
относится к значениям элементов, которые не равны ноль
:
(петля за элемент в '(ноль 1 ноль 2 ноль ноль 3 4 6) когда элемент сумма Это) ;; ⇒ 16
Здесь Это
привязан к выходу (и (> число 3) число)
если истина, сбор чисел больше 3:[4]
(петля за номер из 1 к 6 когда (и (> номер 3) номер) собирать Это) ; ОНО относится к (и (> число 3) число). ;; ⇒ (4 5 6)
Определение анафорических макросов
Одним из примеров является анафорическая версия if-then-else конструкция, что вводит анафора Это
, привязанный к результату тестового предложения:[5]
(дефмакро аиф (тестовая форма тогдашняя форма &необязательный иначе форма) `(позволять ((Это ,тестовая форма)) (если Это ,тогдашняя форма ,иначе форма))) (аиф (+ 2 7) (формат ноль «~ A не равно NIL». Это) (формат ноль "~ A равно NIL". Это)) ;; ⇒ «9 не равно NIL».
Другой пример - анафорическая версия λ-функция, который связывает саму функцию с анафора себя
, позволяя ему повторяться:[5]
(дефмакро аламбда (Пармы &тело тело) `(этикетки ((себя ,Пармы ,@тело)) #'себя)) ;; Факториальная функция, определенная рекурсивно, где `self 'относится к функции alambda (аламбда (п) (если (= п 0) 1 (* п (себя (1- п)))))
Смотрите также
- Анонимная рекурсия
- Гигиенические макросы
- Макро (информатика)
- Цепочка методов
- это (компьютерное программирование)
Рекомендации
- ^ а б Глава 6 из Let over Lambda
- ^ 22. ПЕТЛЯ для черных поясов из Практический Common Lisp
- ^ Что могло бы быть примером анафорического условного оператора в Лиспе? на Переполнение стека
- ^ 6.1.8.1 Примеры группировки разделов от Common Lisp HyperSpec
- ^ а б Глава 14. Анафорические макросы В архиве 26 апреля 2012 г. Wayback Machine из На Лиспе к Пол Грэм
внешняя ссылка
- Глава 14. Анафорические макросы из На Лиспе к Пол Грэм
- Анафора - анафорический сборник макросов