Анафорический макрос - 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- п)))))

Смотрите также

Рекомендации

внешняя ссылка