Jump to content

Анафорический макрос

Анафорический макрос — это тип программного макроса , который намеренно фиксирует некоторую форму, предоставленную макросу, на которую можно ссылаться с помощью анафоры (выражения, ссылающегося на другое). Анафорические макросы впервые появились в Пола Грэма книге On Lisp. [1] и их название является отсылкой к лингвистической анафоре [1] - использование слов в качестве замены предшествующих слов.

The loop Макрос в ANSI Common Lisp является анафорическим по привязке, где it выражение относится к результату тестового выражения в предложении. [2] [3]

Вот пример, который суммирует значение не- nil элементы, где it относится к значениям элементов, которые не равны nil:

 (loop for element in '(nil 1 nil 2 nil nil 3 4 6)
       when element sum it)
 ;; ⇒ 16

Здесь it привязан к выходу (and (> number 3) number) если true, сбор чисел больше 3: [4]

 (loop for number from 1 to 6
       when (and (> number 3) number)
       collect it)                      ; IT refers to (and (> number 3) number).
 ;; ⇒ (4 5 6)

Определение анафорических макросов

[ редактировать ]

Одним из примеров является анафорическая версия конструкции if-then-else , которая вводит анафору. it, привязанный к результату тестового предложения: [5]

 (defmacro aif (test-form then-form &optional else-form)
   `(let ((it ,test-form))
          (if it ,then-form ,else-form)))

 (aif (+ 2 7)
   (format nil "~A does not equal NIL." it)
   (format nil "~A does equal NIL." it))
 ;; ⇒ "9 does not equal NIL."

Другой пример — анафорическая версия λ-функции , которая привязывает саму функцию к анафоре. self, что позволяет ему повторяться : [5]

 (defmacro alambda (parms &body body)
   `(labels ((self ,parms ,@body))
      #'self))

 ;; Factorial function defined recursively where `self' refers to the alambda function
 (alambda (n) 
   (if (= n 0)
     1 
     (* n (self (1- n)))))

См. также

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b438cb211bf48f88b5e3c6cf9844c379__1642579020
URL1:https://arc.ask3.ru/arc/aa/b4/79/b438cb211bf48f88b5e3c6cf9844c379.html
Заголовок, (Title) документа по адресу, URL1:
Anaphoric macro - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)