Mailing List Archive: 49091 messages

[REBOL] Re: Correct Behaviour? Was False = 2 ????

From: jeff:rebol at: 5-Jul-2001 9:13

Howdy, Joel:
> But the simplest test of usability is to show anyone (with > no prejudicial prompting, of course) an ordered collection > of items and simply ask, "Which is the first?" They will > likely not find that a challenging question...
But they will apparently find it challenging if asked "which is the zeroth?"
> I'm simply not interested in defining that term at all.
Why? Why is it so hard to locate zeroth in your simpler system? It seems like zeroth would be a great word for zero based index systems, and yet you want to pretend it's not there, sweep it under the carpet. Tsk tsk. Where is zeroth? We have to conclude one of two (zero of one) things, in our zero indexed system: 1. zeroth position == first position 2. zeroth position comes before the first position. Easy enough right? The zeroth (first) proposition above is the only one that can be right while maintaining the definition of FIRST that you've made. So ZEROTH is FIRST, FIRST is ZEROTH. This is what makes zero based indexing so much more understandable!! The general ease for people to understand the concept of ZEROTH is concomitant with the ease of understanding zero based indexing. No need to hide our good and well suited word.
> We've already covered this. The ancient greeks also didn't > consider "one" a true number. Most people of the middle > ages still believed that the sun revolved around the > earth. . .
The argument is simply that zero based is less intuitive, not that people are incapable of groking it. People are capable of groking base 64, but few people, that I know of, balance their checkbooks in base 64. We commonly start numbering things by one. We teach our children to spread out their fingers and say "one two three.." Or do you teach children to say "zero one two.. " ending on finger nine? David Letterman counts down from 10 to 1 not 9 to 0, NASA does the same. Cars have gears starting with 1 through 4 or 5, not starting with gear zero. It's only some groups of programmers that think it natural to number things starting from zero. The rest of the world orders things starting with 1. Zero based indexing can only be justified based on what it gives you in terms of programming convenience. It can not be justified in terms of common usage. You have to weigh the utility of zero-based indexing against the relatively low "portability" of the concept. So how are we going to reindex date! values?:
>> 0-0-0
** Syntax Error: Invalid date -- 0-0-0 ** Near: (line 1) 0-0-0
>>
Oh come on, REBOL, don't complain about this invalid date! Why it's the zeroth (first) day, month, and year! Isn't that obvious?! Yesterday was: FOURTH of July, 2001, which would be:
>> 3-6-2000
== 3-Jun-2000 Clearly 3-6-2000 is the fourth day, the 7th month and the 2001st year (when we start from zero). Hey, since we're breaking all existing REBOL scripts in the interests of doing things "the right way", why not change the direction of evaluation? Left to right only makes sense in the western world. RIGHT TO LEFT is MUCH MUCH SIMPLER! Right to left is the "RIGHT WAY"!! [[item "Look at this!-->"] print][items of list] item foreach And, how about argument position? Surely it makes more mathematical sense to have the thing to operate with, followed by the thing to operate on, YES? blk: copy [] pick 0 skip -1 insert 0-0-0 blk Much clearer. Especially when we put it the "RIGHT" direction. [] copy blk: blk 0-0-0 insert -1 skip 0 pick Perhaps all statements should be parenthesized. REBOL's free format leads to tremendous ambiguity by offering familiar-looking text which is actually used in inconsistent and highly subtle/complex ways. Arity can become unclear. People should KNOW that they're really programming when they program, so we need parenthesis. ([] copy blk:) (((blk 0-0-0 insert) -1 skip) 0 pick) In fact, this whole concept of words is a little fishy. A given word may evaluate to who knows what. Very tricky, subtle/complex. Perhaps we should not allow people to directly use words but they'll call functions to get and put values based on a name. ("BLK" MAKE-NAME-VALUE) ([] copy "BLK" SET-NAME-VALUE) (((("BLK" GET-NAME-VALUE) 0-0-0 insert) -1 skip) 0 pick) I think it's obvious that if REBOL was like the above it would be cleaner, clearer, and more consistent. (: REBOL's getting easier to understand each day! Take the frog pills and seek the zeroth-- Cheers! -jeff