On Tue, May 24, 2016 at 02:47:04PM +0100, Rainer Weikusat wrote: > Didier Kryn <k...@in2p3.fr> writes: > > Le 23/05/2016 23:29, Rainer Weikusat a écrit : > >> Rainer Weikusat <rweiku...@talktalk.net> writes: > >> > >> [...] > >> > >>> Emacs is a somewhat old-fashioned/ traditional[*] Lisp implemenation > >> [*] It doesn't support lexical scoping. > >> > > > > No idea what that means. > > It means that any binding of some symbol is globally visible during the > dynamic lifetime of the scope which established it instead of being > restricted to code which is lexically contained in this scope. > > Contrived example for that: > > ; function returning the current value of x + 1 > ; > (defun 1+x () (1+ x)) > -> 1+x > > ; function which binds x to the value passed as argument and > ; then invokes 1+x > ; > (defun 1+v (v) > (let > ((x v)) > (1+x))) > -> 1+v > > ; set x to 15 > ; > (setq x 15) > -> 15 > > ; call 1+v with argument 4 > ; > (1+v 4) > -> 5 > > ; call 1+x in the global environment > ; > (1+x) > -> 16 > > This can be executed via *scratch* buffer which does Lisp evaluation > upon C-j. I've marked the lines showing return vaues with ->.
Note: This example describes dynamic scoping. The call to (1+x) uses the x that's active where it is called, not where it is defined. In lexical scoping, it would always use the x where it is defined, no matter what extraneous x's are around where it is called. > > 'Lexical scoping' (which works the way 'local variables' usually work in > other languages) didn't exist in the 'Lisp world' until Scheme came to > be. Not quite. In Lisp 1.5 way back in the 60's they realised absence of lexical scope was a problem, and invented a wrapper called FUNCTION that you placed around a lambda expression that would make the enclosed lamda expression lexically scoped. But Scheme decided that the extra syntax was stupid and implemented lambda expressions lexically from the start. -- hendrik _______________________________________________ Dng mailing list Dng@lists.dyne.org https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng