[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: Walter van Roggen <WVANROGGEN@DEC-MARLBORO.ARPA>
- Subject: macroexpansion environments
- From: "David A. Moon" <Moon@SCRC-RIVERSIDE.ARPA>
- Date: Mon, 4 Jun 84 15:38 EDT
- Cc: common-lisp@SU-AI.ARPA
- In-reply-to: The message of 4 Jun 84 10:47-EDT from Walter van Roggen <WVANROGGEN at DEC-MARLBORO>
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 ()
`(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.