* lexical-let detail semantics
@ 2009-07-27 9:50 Daniel Kraft
0 siblings, 0 replies; only message in thread
From: Daniel Kraft @ 2009-07-27 9:50 UTC (permalink / raw)
Cc: guile-devel
Hi,
I'm working on an implementation of elisp for GNU Guile, and want to
include the lexical-let construct from the Common Lisp Extensions of
elisp. There are some details of its semantics I'm not sure about and
that are not clarified in the documentation of lexical-let, so I had to
do some experiments. Here are two questions that came up during these
where I'd love to hear comments from regular elisp users:
1) let within lexical-let:
(setq a 1)
(defun dyna () a)
(lexical-let ((a 2))
(let ((a 3))
(print (dyna))))
=> 1
My first thought was that a let within the lexical scope of another
lexical-let would revert the symbols to dynamic scoping again, but it
seems that let behaves just as if it was lexical-let for symbols already
lexically bound.
Is this 'expected behaviour' or something 'by chance'? Do you think it
is necessary for compatibility with (most) existing code to mimic this
behaviour or would it be ok for the code above to print 3?
In contrast, the code:
(setq a 1)
(defun dyna () a)
(lexical-let ((a 2))
((lambda (a)
(print (dyna))) 3))
=> 3
does indeed revert a to dynamic binding... This seems somewhat
inconsistent to me (although of course argument-lists and let's are not
really the same thing).
2) Closures:
I'm happy that lexical-let works well to build closures (and in fact it
seems that this is the main intention for lexical-let at all); however
this code does not work as expected:
(setq a 1)
(lexical-let ((a 2))
((lambda () (print a))))
=> 1
I don't know why, but it seems that calling a closure directly fails,
while storing it and calling it later succeeds (as in the examples at
http://www.delorie.com/gnu/docs/emacs/cl_21.html for instance). Is this
a bug or again something expected? If the latter, what's the exact
rationale and semantics then?
Thank you very much for your help!
Daniel
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-07-27 9:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-27 9:50 lexical-let detail semantics Daniel Kraft
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).