[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
macroexpansion environments
Date: Mon 4 Jun 84 10:47:30-EDT
From: "Walter van Roggen" <WVANROGGEN@DEC-MARLBORO.ARPA>
Here's an interesting problem with Common Lisp:
(defvar x 1)
(defmacro m ()
(print x)
`(list ,x x))
(let ((x 2)) (m)) ;case A
(let ((x 2)) () (m)) ;case B
In case A it will print a 1 and return the list (1 2).
In case B it will print a 2 and return the list (2 2).
Think about what will happen when you compile this code. Both cases will
print a 1 AT COMPILE TIME and include the list (1 2) in the expanded code.
Or, if you don't put an eval-when compile around the defvar of x, it will
blow out at compile time.
I don't think this is a very interesting problem: you have simply
constructed a program whose semantics cannot possibly be well-defined.