On Sun, May 24, 2009 at 3:02 AM, Nikodemus Siivola <nikodemus@random-state.net> wrote:
I would say it isn't a bug, since your code depends on the order the
substitutions are carried out, and _if_ the spec mandates any
particular order (which I don't think it does) that would be

 (CAR X) -> (CDR X)
 (CAAR X) -> (CAR X)
 (CDAR X) -> (CAAR X)
 (CDR X) -> (CDAR X)

based on "In the form (rotatef place1 place2 ... placen), the values
in place1 through placen are read and written. Values 2 through n and
value 1 are then stored into place1 through placen. [...]. "

Is it possible that the "and written" at the end of the first sentence of the quote is in error?  It doesn't make any sense given the word "then" in the second sentence.  If you take out "and written", it's clear that the macro should read all places in parallel first, then write them.  On that interpretation, it wouldn't matter which of the places one wrote first, as long as the circular order were unchanged.

-- Scott