Kaz Kylheku <kaz@ashi.footprints.net> wrote:
+---------------
| Some things that are in Lisp, but not in Scheme:
+---------------
A couple more:
- A very clear separation betwen various "times" in the life
of a program: read time, compile time, macro expansion time,
evaluation time (also called execution or run time), and
considerable user control over making things happen differently
at compile, load, or execute times with the EVAL-WHEN form.
Very important when using complex macros.
- Compiler macros [CLHS 3.2.2.1]: A macro, that can have the same name
as an ordinary function, that optionally expands to something other
than a call to that function. This gives the user the ability to do
certain compile-time optimizations for themselves.
For example, a compiler macro may look at the arguments provided to
a function call, see that one of them is a certain frequently-used
constant value, and decide to replace that call with a call to a
version of the function specialized for that argument value. Or it
could even recognize some argument as being a call to *another*
function, and choose to evaluate that other function at compile
time and replace the argument with the evaluated result. Etc.
-Rob
-----
Rob Warnock, 30-3-510 <rpw3@sgi.com>
SGI Network Engineering <http://www.rpw3.org/>
1600 Amphitheatre Pkwy. Phone: 650-933-1673
Mountain View, CA 94043 PP-ASEL-IA
[Note: aaanalyst@sgi.com and zedwatch@sgi.com aren't for humans ]