On Wed, Jul 28, 2010 at 11:34 AM, Dave Whipp <d...@dave.whipp.name> wrote:
> To squint at this slightly, in the context that we already have 0...1e10 as > a sequence generator, perhaps the semantics of iterating a range should be > unordered -- that is, > > for 0..10 -> $x { ... } > > is treated as > > for (0...10).pick(*) -> $x { ... } > As others have pointed out, this has some problems. You can't implement 0..* that way, just for starters. > Then the whole question of reversibility is moot. Really? I don't think it is. In fact, you've simply made the problem pop up everywhere, and guaranteed that .. must behave totally unlike any other iterator. Getting back to 10..0... The complexity of implementation argument doesn't really hold for me, as: (a..b).list = a>b ?? a,*.pred ... b !! a,*.succ ... b Is pretty darned simple and does not require that b implement anything more than it does under the current implementation. a, on the other hand, now has to (optionally, since throwing an exception is the alternative) implement one more method. The more I look at this, the more I think ".." and "..." are reversed. ".." has a very specific and narrow usage (comparing ranges) and "..." is probably going to be the most broadly used operator in the language outside of quotes, commas and the basic, C-derived math and logic ops. Many (most?) loops will involve "...". Most array initializers will involve "...". Why are we not calling that ".."? Just because we defined ".." first, and it grandfathered its way in the door? Because it resembles the math op? These don't seem like good reasons. -- Aaron Sherman Email or GTalk: a...@ajs.com http://www.ajs.com/~ajs