evan@russell.STANFORD.EDU (Evan Kirshenbaum) (10/15/87)
I recently started using CScheme, and I have a question about the efficiency of the compiler. When writing macros, a common idiom I use is: `(lambda ,args (let (,@(and var1 `((,var1 ,(generate-uninterned-symbol)))) ,@(and var2 `((,var2 ,(generate-uninterned-symbol)))) ...) ...)) where temporary variables are gensymed only if they are needed. If no variables are needed, what comes out is (lambda (x y z) (let () ...)) Now in any other lisp/scheme the internal let binding would be discarded. In CScheme, it would seem that the internal environment would have to be created because of the way define works. I use this idiom a lot, and wind up with functions that pp as (let () (let () ...)). My question is: is the compiler smart enough to realize that no defines occur in the body, and so no environment is needed, or do I have to make macros condition on the presence/absence of temporary variables? --- Evan Kirshenbaum Stanford University evan@CSLI.STANFORD.EDU ...!{ucbvax,decvax}!decwrl!glacier!evan If you think my opinions represent this university, you haven't been on campus recently!