GNU bug report logs - #6583
23.2; cl loop macro with `and' clause

Previous Next

Package: emacs;

Reported by: Kevin Ryde <user42 <at> zip.com.au>

Date: Wed, 7 Jul 2010 23:34:03 UTC

Severity: normal

Tags: confirmed

Merged with 56416

Found in versions 23.2, 24.5, 25.0.94, 29.0.50

Full log


View this message in rfc822 format

From: npostavs <at> users.sourceforge.net
To: Alex <agrambot <at> gmail.com>
Cc: 6583 <at> debbugs.gnu.org, Kevin Ryde <user42 <at> zip.com.au>
Subject: bug#6583: 23.2; cl loop macro with `and' clause
Date: Sat, 24 Jun 2017 20:22:09 -0400
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.