Integer.step is inclusive?!

  • Thread starter Just Another Victim of the Ambient Morality
  • Start date
J

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?!
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? I mean, the ususal programming protocol is that the last element
is not included (half-open sets, if you will) so the number of iterations is
the difference between numbers.
Why did Ruby turn out this way? Thank you...
 
G

Gary Wright

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? I mean, the ususal programming protocol is that the last
element
is not included (half-open sets, if you will) so the number of
iterations is
the difference between numbers.
Why did Ruby turn out this way? Thank you...

It isn't really that Ruby is this way just that the method 'upto' is
this way.
There are several other ways to iterate over an integer range:
0
1
2
3
4
0
1
2
3

0
1
2
3
0
1
2
3
4
0
2
4
 
T

Thomas Preymesser

2008/12/23 Just Another Victim of the Ambient Morality said:
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
 
T

Tim Greer

Just said:
0.upto(10){ |i| puts i }

...I will get 11 lines of output

Because 0 to 10 is 11 numbers. If you want 10 numbers, use 1.upto(10)
If you want different behavior, you can use a different looping method,
or use post or pre increment, depending if you want it to display the
last element or not.
 
J

Just Another Victim of the Ambient Morality

Just Another Victim of the Ambient Morality said:
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?!
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? I mean, the ususal programming protocol is that the last
element is not included (half-open sets, if you will) so the number of
iterations is the difference between numbers.
Why did Ruby turn out this way? Thank you...

D'oh!
...and by ".upto" I, of course, meant ".step" !
 
R

Ron Fox

Thomas said:
because this are eleven numbers: 0 1 2 3 4 5 6 7 8 9 10


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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top