Issue: DO-SYMBOLS-BLOCK-SCOPEReferences: DO-SYMBOLS, DO-EXTERNAL-SYMBOLS, DO-ALL-SYMBOLS
Related issues:
Category: CLARIFICATION
Edit history: v1, 13 Feb 1991, Sandra Loosemore
Problem description:
It's not clear what the scope of the implicit NIL block surrounding
a DO-SYMBOLS, DO-EXTERNAL-SYMBOLS, or DO-ALL-SYMBOLS form is. Does
it include only the body forms or the entire form?
Proposal (DO-SYMBOLS-BLOCK-SCOPE:ENTIRE-FORM):
Clarify that the implicit NIL block effectively surrounds the entire
DO-SYMBOLS, DO-EXTERNAL-SYMBOLS, or DO-ALL-SYMBOLS form.
Rationale:
This is consistent with DO, DO*, DOLIST, and DOTIMES.
Examples:
(do-symbols (s (or (find-package "FROB") (return nil)))
(print s))
t)
=> always returns T since BLOCK referred to by the RETURN is the
implicit BLOCK established by DO-SYMBOLS, not the explicit outer
Current Practice:
Lucid version 4.0 implements this proposal.
Allegro version 3.1 implements DO-EXTERNAL-SYMBOLS and DO-ALL-SYMBOLS
according to this proposal, but not DO-SYMBOLS.
Chestnut's Lisp-to-C translator implements this proposal.
Cost to Implementors:
Small.
Cost to Users:
None.
Cost of non-adoption:
Implementations will differ and the language specification will be vague,
without any good reason.
Performance impact:
Probably none.
Benefits:
The cost of non-adoption is avoided.
Esthetics:
Making the language consistent is a good thing.
Discussion:
-------