I am currently working my way through Graham's On Lisp and find this particular bit difficult to understand:
Binding. Lexical variables must appear directly in the source code. The first argument to
setqis not evaluated, for example, so anything built onsetqmust be a macro which expands into asetq, rather than a function which calls it. Likewise for operators likelet, whose arguments are to appear as parameters in a lambda expression, for macros like do which expand intolets, and so on. Any new operator which is to alter the lexical bindings of its arguments must be written as a macro.
This comes from Chapter 8, which describes when macros should and should not be used in place of functions.
What exactly does he mean in this paragraph? Could someone give a concrete example or two?
Much appreciated!
letdo not appear in a lambda expression, for instance. What?