On Tue, Jul 20, 2010 at 7:31 PM, Aaron Sherman <a...@ajs.com> wrote: > 2) We deny that a range whose LHS is "larger" than its RHS makes sense, but > we also don't provide an easy way to construct such ranges lazily otherwise. > This would be annoying only, but then we have declared that ranges are the > right way to construct basic loops (e.g. for (1..1e10).reverse -> $i {...} > which is not lazy (blows up your machine) and feels awfully clunky next to > for 1e10..1 -> $i {...} which would not blow up your machine, or even make > it break a sweat, if it worked)
Ranges haven't been intended to be the "right way" to construct basic loops for some time now. That's what the "..." series operator is for. for 1e10 ... 1 -> $i { # whatever } is lazy by the spec, and in fact is lazy and fully functional in Rakudo. (Errr... okay, actually it just seg faulted after hitting 9999968746 in the countdown. But that's a Rakudo bug unrelated to this, I'm pretty sure.) All the magic that one wants for handling loop indices -- going backwards, skipping numbers, geometric series, and more -- is present in the series operator. Range is not supposed to do any of that stuff other than the most basic forward sequence. -- Solomon Foster: colo...@gmail.com HarmonyWare, Inc: http://www.harmonyware.com