[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Elementary question about backquote in T.



I hope it is okay to send a T question to this list, since I am not aware
of a separate list for T.

If we define:

	(define-macro (bar x) `(list ,(car x)))

then (macro-expand '(bar '(1 2)) *scratch-env*) ==> (list quote). That is, an
attempt to evaluate (bar '(1 2)) will give an error to the effect that
quote is unbound.

This appears to me rather confusing. A macro is ideally a rewrite rule.
So I expect (bar '(1 2)) to be rewritten to the form (list u) where
u = (car '(1 2)) i.e. (list u) must be rewritten to (list 1).
This expectation is supported by the following observations:

       >  (set x '(1 2))
	  ;; x is bound to '(1 2)

       > `(list ,(car x))

	  ==> (list 1)

What am I missing? By the way, Franzlisp backquote behaves similarly.

Thanks for any comments.

-- Sanjai