4 ms·
I'll just leave this here: > Conventionally, Julia's arrays are indexed starting at 1 https://www.google.com/search?q=arrays%20start%20at%201&tbm=isch https:/
by 21 8y ago
I'll just leave this here:
> Conventionally, Julia's arrays are indexed starting at 1
https://www.google.com/search?q=arrays%20start%20at%201&tbm=isch https://www.google.com/search?q=arrays%20start%20at%201&tbm=...
- chriskanan 8y agoThe default is 1, but... > Julia supports arrays with arbitrary indices. https://docs.julialang.org/en/latest/devdocs/offset-arrays/ https://docs.julialang.org/en/latest/devdocs/offset-arrays/ I personally haven't had any problem with 1-indexing when I used to program a lot in MATLAB. Maybe that's because I first learned to program using QuickBasic, which has 1-indexing. I don't understand the passion for 0-indexing (I know the arguments).
- m4r35n357 8y agoOuch, I didn't understand one bit of that document!
- bb88 8y agoFrom that document: This code implicitly assumes that vectors are indexed from 1; if dest starts at a different index than src, there is a chance that this code would trigger a segfault. (If you do get segfaults, to help locate the cause try running julia with the option --check-bounds=yes.) So it comes with a tradeoff, namely that if someone else chose different bounds on an array other than [1..n] and you try to access it the standard way, you'll get a segfault. This would scare me away from using anything other than the default indexing on an array in Julia.
- nur0n 8y agoI hadn't seen these cartoons before. I had a good laugh :) More seriously: there are very limited cases where indexing explicitly into an array using literals is The Right Thing to do. It's almost always better to use `map(fn, xs)`, `foreach(fn, xs)`, `for x in xs; fn(x); end`, ... . If you really wanted to, you can even do: for i in firstindex(xs):lastindex(xs) x = xs[i] end
- silverdrake11 8y agoSome computer science textbooks use array indexes starting at one
- newen 8y agoNot that I particularly care to start yet another meaningless bikeshedding argument about 0 vs 1 indexing but... I think that a proper high level language should have arrays that start at 1. It's only because of C and many programmers' weird tendency to take to heart statements from authority (Dijkstra) without any criticism that the 0-index meme is so popular now. 0-index is useful because it makes pointer arithmetic useful while pointer arithmetic is not often used in high level languages. 0-index is for offsets not counting. Vast majority of people use 1-index for counting. People who say everyone should use 0-index for counting sound really really silly to me (and frankly the vast majority of people; it's only because this meme is so popular in the programming world that they can somewhat get away with making this statement).
- erezyehuda 8y agoDijkstra gave pretty concise justification for 0-indexing, so I wouldn't reduce it down to "authority" for why people use it. While I'm personally comfortable hopping back and forth between conventions, is there any deeper justification for using 1-indexing? "Vast majority of people" seems like the same meme you're rejecting for 0-base.
- newen 8y agoI wouldn't say there's any deeper justification for 1-based indexing but neither is there for 0-based indexing. But convention is a pretty good reason for 1-based indexing. Regarding Dijkstra, I don't buy the specific argument he originally made about sequences much less the generalized argument that has become a meme now. His main argument is that a <= i < b (everything integers) is less "ugly" because b-a is the length of the sequence and a <= i < a is an empty sequence. And because you must use the above convention, 0 <= i < N is "nicer" than 1<= i < N+1. I don't buy his a <= i < b premise (b-a+1 is not exactly hard to write and similarly a <= i <= a-1 for an empty sequence is not impossible to write). There is nothing wrong with a <= i <= b. It is inclusive on both sides which is much less confusing than inclusive on one side and exclusive on the other (just look at python's ranges for how it can get confusing; range(5) means 0,1,2,3,4 ...seriously? Where did my 5 go? And range(a,b) meaning a <= i < b is so much more confusing than inclusive ranges). When you use inclusive ranges, you can actually see the numbers that are on both sides of the sequence. So, if we use this convention, then 1 <= i <= N is much "nicer" than 0 <= i <= N-1. Aside from my argument about inclusive ranges, the fact is that both inclusive ranges and 1-indexing have thousands of years of convention behind it's back. This should not be discounted since math is a language, language is for communication, and communication depends on conventions.