GNU bug report logs -
#6583
23.2; cl loop macro with `and' clause
Previous Next
Full log
View this message in rfc822 format
Alex <agrambot <at> gmail.com> writes:
>
> This problem appears to have been present even in the initial revision
> (fcd737693e8), specifically in the (eq word '=) clause.
>
> I see no reason for the (or ands (eq (car args) 'and)) consequent, as
> what it does when it detects an 'and is:
>
> * In the first iteration, set var (k) to the first form (elem) at the
> beginning of the iteration
>
> * In subsequent iterations, set var (k) to itself at the beginning of
> the iteration (noop)
>
> * At the end of every iteration, set var (k) to the second form
> (defaulting to the first form, elem).
>
> The last point is the main problem: you can't set the variable to the
> first form at the end of the iteration as it might depend on other loop
> variables (in this case elem) that are updated at the beginning of the
> iteration.
>
> I've attached a patch below that appears to solve this issue. With the
> patch, var is set to the first or second form at the beginning of the
> iteration (just like it is when no 'and is present).
I can't claim to fully understand the loop macro implementation, but
your patch breaks this example from the manual `(cl) For Clauses':
(cl-loop for x below 5 for y = nil then x collect (list x y))
=> ((0 nil) (1 1) (2 2) (3 3) (4 4))
(cl-loop for x below 5 and y = nil then x collect (list x y))
=> ((0 nil) (1 0) (2 1) (3 2) (4 3))
With your patch the second loop gives ((0 nil) (1 1) (2 2) (3 3) (4 4))
like the first.
This bug report was last modified 3 years and 75 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.