From: Ron Fox Date: 2008-12-24T21:51:20+09:00 Subject: Re: Integer.step is inclusive?! Thomas Preymesser wrote: > 2008/12/23 Just Another Victim of the Ambient Morality : >> I don't know how to post the output of irb so I'll just have to describe >> it but if I run the following code: >> >> 0.upto(10){ |i| puts i } >> >> ...I will get 11 lines of output. This iterates eleven times. Really?! > > because this are eleven numbers: 0 1 2 3 4 5 6 7 8 9 10 > >> Why it does this is obvious. Integer.upto is inclusive so it includes >> both 0 and 10. However, am I the only one who thinks this is strange >> behaviour? > > why do you think a loop from 0 to 10 should exclude the upper border? > > In Ada it is 'for i in 0 .. 10 loop' which is a loop from 0 to 10. > > -Thomas > > To show my age I can say that FORTRAN is inclusive to: DO 100 I = 0,10 ... 100 CONTINUE executes 11 times. Many languages I know don't have looping structures of this sort but have explicit initialization, test, post loop action things (e.g. C/C++ for loops). There it's idiomatic to write e.g.: for(i =0; i < 10; i++) {..} since int array[10] has elements 0..9, however it's certainly not required as for(i =0; i<=10; i++){...} is certainly just fine... if that's what's intended. I go back to my mantra when using a language I'm new to. The mantra is based on a 'game' model of programming languages... languages are games, they have rules. The rules may have reasons, or they may be arbitrary choices. They may even be capricious in some languages (e.g. LOLCODE see http://www.globalnerdy.com/2007/05/28/lolcode-the-lolcat-programming-language/). But if you don't play by the rules, you lose. If you do you might win. Asking for the rules to be different, doesn't help you win the game .. so the mantra Ruby is not xxxxx where you can substitute for xxxxx the set of languages you are trying to force ruby to be. Ron -- Ron Fox NSCL Michigan State University East Lansing, MI 48824-1321