(+1 for Konrad's point regarding concat).

Two points, in favor of 0-based indexing (as opposed to 1-based)

When you look at a piece of code and see zero used as an index into
some custom-made collection, you immediately know that this is a
reference to the first item. Except for the rare cases of collections
with negative indexes, it is clear that 0 is the first element. An
index of 1 is ambiguous: It means either the first or the second
element, depending on the convention of the language as well as
whether the programmer who wrote the collection decided to follow the
convention.

The second point is somewhat less significant but it does have a
point: With 1-based you need to write (<= i n) instead of (< i n). It
seems that programmers prefer to write less, hence  making 0-based
indexing more popular.

Just my 2c

--
Itay Maman
http://javadots.blogspot.com/


On Mar 4, 3:40 pm, Konrad Hinsen <konrad.hin...@laposte.net> wrote:
> On Mar 4, 2009, at 14:06, Mibu wrote:
>
> > On Mar 4, 2:46 pm, Michael Wood <esiot...@gmail.com> wrote:
> >> On Wed, Mar 4, 2009 at 2:07 PM, Mibu <mibu.cloj...@gmail.com> wrote:
> >>> Why does range in Clojure use an inclusive-exclusive range?
> >> For what it's worth, Python's range function works the same way.
>
> > I think Clojure's design leans towards what's right more than what's
> > custom even if it breaks old habits, so I am curious why wasn't this
> > bad habit broken as well. Is it just convention, bad as it is? Or
> > maybe I'm missing some hidden good reason for using this confusing (to
> > me) range over an inclusive range.
>
> I wouldn't call it a bad habit just because it's not what you expected.
>
> The definition of range used in Clojure (and elsewhere) has some nice  
> properties:
>
>         (=  n  (count (range n)))
>
>         (=  (- b a)  (count (range a b)))
>
>         (=  (concat (range a b) (range b c))  (range a c))
>
> Their utility may not be obvious immediately, but if you write code  
> that works a lot on indices, you will learn to appreciate them.
>
> Konrad.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to