Mercurial > hg > xemacs-beta
diff man/lispref/macros.texi @ 4905:755ae5b97edb
Change "special form" to "special operator" in our sources.
Add a compatible function alias, and the relevant manual index entries.
src/ChangeLog addition:
2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
* symbols.c (Fspecial_operator_p, syms_of_symbols):
* eval.c (print_subr, Finteractive_p, Ffuncall)
(Ffunction_min_args, Ffunction_max_args, vars_of_eval):
* editfns.c:
* data.c (Fsubr_max_args):
* doc.c (Fbuilt_in_symbol_file):
Change "special form" to "special operator" in our sources.
man/ChangeLog addition:
2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
* xemacs/programs.texi (Defuns):
* lispref/variables.texi (Local Variables, Defining Variables)
(Setting Variables, Default Value):
* lispref/symbols.texi (Definitions):
* lispref/searching.texi (Saving Match Data):
* lispref/positions.texi (Excursions, Narrowing):
* lispref/objects.texi (Primitive Function Type):
* lispref/macros.texi (Defining Macros, Backquote):
* lispref/lispref.texi (Top):
* lispref/intro.texi (A Sample Function Description):
* lispref/help.texi (Help Functions):
* lispref/functions.texi (What Is a Function, Simple Lambda)
(Defining Functions, Calling Functions, Anonymous Functions):
* lispref/frames.texi (Input Focus):
* lispref/eval.texi (Forms, Function Indirection)
(Special Operators, Quoting):
* lispref/edebug-inc.texi (Instrumenting)
(Specification Examples):
* lispref/debugging.texi (Internals of Debugger):
* lispref/control.texi (Control Structures, Sequencing):
(Conditionals, Combining Conditions, Iteration):
(Catch and Throw, Handling Errors):
* lispref/commands.texi (Defining Commands, Using Interactive):
Terminology change; special operator -> special form.
Don't attempt to change this in texinfo.texi or cl.texi, which use
macros I don't understand.
* lispref/macros.texi (Defining Macros): Give an anonymous macro
example here.
* lispref/positions.texi (Excursions):
Correct some documentation that called a couple of macros special
forms.
* lispref/searching.texi (Saving Match Data):
Drop some documentation of how to write code that works with Emacs
18.
* lispref/specifiers.texi (Adding Specifications):
Correct this; #'let-specifier is a macro, not a special operator.
* lispref/windows.texi (Window Configurations)
(Selecting Windows):
Correct this, #'save-selected-window and #'save-window-excursion
are macros, not special operators.
lisp/ChangeLog addition:
2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
* obsolete.el:
* loadhist.el (symbol-file):
* help.el (describe-function-1):
* bytecomp.el: (byte-compile-save-current-buffer):
* byte-optimize.el (byte-optimize-form-code-walker):
* subr.el (subr-arity):
Change "special form" to "special operator" in these files, it's
the more logical term.
* subr.el (special-form-p): Provide this alias for
#'special-operator-p.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 31 Jan 2010 20:28:01 +0000 |
parents | 6780963faf78 |
children | 62b9ef1ed4ac |
line wrap: on
line diff
--- a/man/lispref/macros.texi Sun Jan 31 18:09:57 2010 +0000 +++ b/man/lispref/macros.texi Sun Jan 31 20:28:01 2010 +0000 @@ -178,10 +178,39 @@ from the macro call. It is possible to use an anonymous Lisp macro just like an anonymous -function, but this is never done, because it does not make sense to pass -an anonymous macro to functionals such as @code{mapcar}. In practice, -all Lisp macros have names, and they are usually defined with the -special form @code{defmacro}. +function. It doesn't make sense to pass an anonymous macro to +functionals such as @code{mapcar}, and it is usually more readable to +use @code{macrolet} to make a local macro definition, and call that. +But if, for whatever reason, @code{macrolet} is not available, code +like the following may be useful: + +@example +((macro . (lambda (&rest arguments) + (let (res) + (while (consp arguments) + (setq res (cons (cons 'put + (cons (list 'quote (car arguments)) + '((quote my-property) t))) + res) + arguments (cdr arguments))) + (cons 'progn res)))) + + - = floor ceiling round) +@end example + +This expands to: + +@example +(progn + (put 'round 'my-property t) + (put 'ceiling 'my-property t) + (put 'floor 'my-property t) + (put '= 'my-property t) + (put '- 'my-property t) + (put '+ 'my-property t)) +@end example + +In practice, almost all Lisp macros have names, and they are usually +defined with the special operator @code{defmacro}. @defspec defmacro name argument-list body-forms@dots{} @code{defmacro} defines the symbol @var{name} as a macro that looks @@ -214,7 +243,7 @@ Backquote allows you to quote a list, but selectively evaluate elements of that list. In the simplest case, it is identical to the -special form @code{quote} (@pxref{Quoting}). For example, these +special operator @code{quote} (@pxref{Quoting}). For example, these two forms yield identical results: @example