Duncan Harvey <usenet-2006-01@abbrvtd.org.uk> wrote:
+---------------
| Rob Warnock <rpw3@rpw3.org> wrote:
| > 4. [Minor] Use LOOP instead of DO for the iteration, mainly because
| > it's more concise [not that that matters much inside a macro].
|
| Isn't that a bad idea? Wouldn't it cause something like this to
| misbehave, for instance?:
|
| (loop for pathname in '("a" "b" "c" "d")
| do (do-file-lines (line pathname :direction :input)
| (when (some-condition-met-p line)
| (loop-finish))
+---------------
Well, that *might* be also construed as a "feature", that is, it
gives one the ability to do an early termination on a given file. ;-}
But your point is taken -- if an iteration macro does choose
to emit a LOOP, it should state so explicitly, e.g., add the
following to the doc string previously shown: "Uses LOOP to
perform the iteration, so a (LOOP-FINISH) within BODY will
terminate the iteration and close the file."
Note that I already had some obvious qualms about declarations,
which is why the default :KEY function case wrapped a null LET
around the BODY, just so that declarations would work. Otherwise
a simple "DO ,@BODY" splice would have sufficed.
What do others think? Are these sorts of conflicts common and
serious enough to ban the emitting of LOOP from (most) iteration
macros?
-Rob
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607