Anaphoric macro
Encyclopedia
An anaphoric macro is a type of programming macro that deliberately captures some form supplied to the macro which may be referred to by an anaphor (an expression referring to another). Anaphoric macros first appeared in Paul Graham's On Lisp
On Lisp
On Lisp: Advanced Techniques for Common Lisp is a book by Paul Graham on macro programming in Common Lisp. It is currently out of print, but can be freely downloaded as a pdf.-External links:**Free versions of "On Lisp"******...

 and their name is a reference to linguistic anaphora
Anaphora (linguistics)
In linguistics, anaphora is an instance of an expression referring to another. Usually, an anaphoric expression is represented by a pro-form or some other kind of deictic--for instance, a pronoun referring to its antecedent...

—the use of words as a substitute for preceding words.

Examples

The loop macro in ANSI Common Lisp is anaphoric in that it binds it to the result of the test expression in a clause.

Here is an example that sums the value of non-nil elements, where it refers to the values of elements that do not equal nil:

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


Here it is bound to the output of (and (> number 3) number) when true, collecting numbers larger than 3:

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

Defining anaphoric macros

One example is an anaphoric version of the if-then-else construct which introduces an anaphor it which is bound to the result of the test clause:


(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."


Anther example is an anaphoric version of the λ-function which binds the function itself to the anaphor self, allowing it to recurse
Recursion (computer science)
Recursion in computer science is a method where the solution to a problem depends on solutions to smaller instances of the same problem. The approach can be applied to many types of problems, and is one of the central ideas of computer science....

:


(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
(* x (self (1- x)))))

External links

  • Chapter 14. Anaphoric Macros from On Lisp
    On Lisp
    On Lisp: Advanced Techniques for Common Lisp is a book by Paul Graham on macro programming in Common Lisp. It is currently out of print, but can be freely downloaded as a pdf.-External links:**Free versions of "On Lisp"******...

     by Paul Graham
    Paul Graham
    Paul Graham is a programmer, venture capitalist, and essayist. He is known for his work on Lisp, for co-founding Viaweb , and for co-founding the Y Combinator seed capital firm...

  • Anaphora — an anaphoric macro collection
The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK