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

### From: joel:neely:fedex at: 2-Jul-2001 16:38

Hello, all, Having already expressed some opinions (perhaps too many ;-) in this area, I felt inclined to listen for a while. I think there are a couple of points that haven't come up that are worth considering.[Robbo1Mark--aol--com]wrote:> 1. Should Series! Index begin at Zero? >I'd rephrase as "What are the pro/con tradeoffs for having series indices begin at 0 or 1? If there are advantages to having 0-origin indexing, do those advantages outweigh the effort of conversion of existing code?" Let me pose a practical programming question: given>> a: [2 3 5 7 11 13 17 19] == [2 3 5 7 11 13 17 19] >> b: at a 5 == [11 13 17 19] >> c: at b 3 == [17 19]what is the relationship between A and C? I.e., what value of X makes pick a x equivalent to pick c 2 Answering this question (or explaining the answer) in a 1-origin scheme (actually, any non-0-origin scheme) seems to involve the distinction between absolute indices and relative indices, which combine according to the following rules: absolute - absolute is relative absolute + absolute is useless/misleading relative +/- relative is relative absolute +/- relative is absolute The relative index of B in A is (5 - 1). The relative index of C in B is (3 - 1). Therefore, the absolute index of C/2 in A is (5 - 1) + (3 - 1) + (2 - 1) + 1 = 8. If all indexing were 0-origin, the distinction between absolute and relative indexes goes away. The above example would have read ;; a: [2 3 5 7 11 13 17 19] == [2 3 5 7 11 13 17 19] ;; b: at a 4 == [11 13 17 19] ;; c: at b 2 == [17 19] and the position of C/2 relative to A would be 4 + 2 + 2 = 8. Remember that it wasn't until western civilization gave up the 1-origin Roman numerals and began using the 0-origin decimal system that arithmetic really began the uphill climb to becoming Mathematics.> 2. Should 0, None & False be equivalent > for 'PICKing values from a series! and > return the FIRST or index 0 value whereas > True and 1 would return the SECOND or > Index 1 value? >There's another lurking inconsistency, which has nothing to do with converting to/from integers. Consider that>> logblk: reduce [[ 1 < 2 1 > 2 2 < 1 2 > 1 [ ] == [true false false true]>> sort logblk == [false false true true]Doesn't it seem odd that SORT thinks that FALSE precedes TRUE, and yet PICK thinks that FALSE *follows* TRUE? Surely the ordering of values within a type is a meaningful concept, whether or not we try to convert to/from some other type? -- It's turtles all the way down! joel'dot'neely'at'fedex'dot'com