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

Free variables in a LAMBDA which names a function



    Date: Thu, 26 Mar 87 00:44 EST
    From: Barry Margolin <barmar@Think.COM>
			 My guess is that the compiler you are testing
    translated the definition into:

    (defun foo (arg)
      (#:gensym 5))

    (defun #:gensym (x)
      (+ x arg))

    This would be OK in a dynamically-scoped Lisp (in fact, I believe the
    Maclisp compiler did exactly this), but not in Common Lisp.  Your
    definition should be equivalent to
I don't know of any compiler which did this.  Maclisp's LET
was a macro (at least initially) that turned into LAMBDA in
the functional position like this; in other words, this was
Maclisp's ONLY way to get lexical variables other than arguments
in the argument list.

Maclisp did do something similar to what you describe when
the lambda was not in the functional position; i.e. when
you passed it as an argument.  This meant you would have
had to declare ARG special to get the intended behaviour,
and no compiler warning about ARG appearing free inside
the LAMBDA.