This is a confusing example, because in a REPL steps of compilation and evaluation are interleaved.
Indeed, can you write a program for CLISP that works like this:
- takes one command line argument (a file name)
- reads in the given file, interprets it as Common Lisp code, expecting it to deliver a definition for the add2 macro
- then runs
(let ((a 1)) (dotimes (i 4) (add2 a)))> This is a confusing example, because in a REPL steps of compilation and evaluation are interleaved.
The CLISP REPL does not compile, thus it can't be interleaved.
> then runs
It will still be interpreted and the macro will still be expanded at runtime.
CLISP example:
As one can see the macro form is expanded four times at runtime.