GNU bug report logs -
#8711
24.0.50; binding _ to unused values with lexical-binding
Previous Next
Reported by: Helmut Eller <eller.helmut <at> gmail.com>
Date: Sat, 21 May 2011 18:45:02 UTC
Severity: minor
Found in versions 24.0.50, 26.0.50
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
> Apparently, the macroexpansion of `dolist' invokes RESULT as
> (setq VAR nil)
> RESULT
> or, in the cl-macs `dolist', as
> (let ((VAR nil))
> RESULT)
> which I suppose has been doing for decades, but is still a bit
> strange.
That's how dolist/dotimes are defined in Common-Lisp, hence that's
how it works in cl-macs. The subr versions also do it because when we
introduced them, some people brought up the issue and it seemed there
was no point in being incompatible.
> The docstring for `dolist' does not say that VAR is set to
> nil before computing RESULT.
Indeed.
> If computing RESULT needed the last VAR, the current code precludes it
> (unless it requires VAR to be nil, of course ;-)
Yes, I do find it very odd as well, but CLHS says clearly "At the time
result-form is processed, var is bound to nil".
> And, if computing RESULT requieres an outside VAR, the programmer is
> going to be forced to use this anyway:
> (let ((VAR 'myval))
> (dolist (VAR mylist)
> ...)
> (compute-my-result VAR)) ;; with the let-bound VAR, not the dolist-bound one
Or she can just use different names rather than reusing the same
variable name.
> so setting it to nil in the (dolist (VAR LIST RESULT) ...) case does
> not bring any clear benefit, even in the non-lexical case.
Agreed.
Stefan
This bug report was last modified 3 years and 11 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.