3 ms·
when I count apples I happily start with one. it's "natural" to label the first thing "1". or how would you count, say, 3 Apples? or three legionaries?
by froh 4y ago
when I count apples I happily start with one. it's "natural" to label the first thing "1".
or how would you count, say, 3 Apples? or three legionaries?
- iopq 4y agoCounter-example: You have to remove all desks from #20 to #30, how many desks are there? Oh, it's 11 desks, I see. This is because we used INCLUSIVE indexing, instead of semi-open interval. If we use semi-open intervals, we don't include the last item, so that we can write match index { 0..10 => println!("first ten"), 10..20 => println!("next ten"), _ => println!("something else"), } but this forces us to start our intervals at 0, otherwise we would have to write 1..11 which would be awkward
- maxdamantus 4y agoIndeed. End exclusion is advantageous because we don't need to add or subtract 1 when constructing or interpreting ranges. Forgetting to add or subtract 1 is basically why off-by-one errors exist (and doing add rather than subtract or vice versa is probably why off-by-two errors exist). `a..(a+n)` is an n-length range, not an (n + 1)-length range (oh look, an "add 1" operation!). And an empty range is denoted by `a..a`, not `a..(a-1)` (oh look, a "subtract 1" operation!).
- gernb 4y agodoesn't swift use inclusive indexing? 1...10 includes 10
- maxdamantus 4y agoHaven't used Swift, but looking at the documentation, it seems to support `...` for end-inclusive and `..<` for end-exclusive. Looking at the Swift standard library, end-exclusive ranges seem to be far more commonly used: ~/build/swift$ git grep -e '\.\.< *[a-zA-Z0-9_(]' --and --not -e '^ *//' -- stdlib/\*.swift | wc -l 599 ~/build/swift$ git grep -e '\.\.\. *[a-zA-Z0-9_(]' --and --not -e '^ *//' -- stdlib/\*.swift | wc -l 112
- maxdamantus 4y ago[0, 1, 2] would be how I would refer to my 3 apples. Each apple is identified by the number of apples that precede it. I don't think it's inherently more natural to start from 1, just conventional. Disregarding history/convention, I think it would be more natural to use the lowest available natural number. Back in Roman times, the lowest natural number that people were aware of was "1", so obviously they started counting from that number. Our understanding of and use of mathematics has evolved since then, and accordingly there are fields such as computer science and combinatorics where there are clear advantages to starting from the smallest number (zero). In virtually all other cases, the reason "1" seems more natural is because that's the way it's been done historically. It seems that when labelling those apples using a 1-based count, the logic is basically: each apple is identified by the number of apples that precede it, plus 1. The reason for the "plus 1" is that that was your starting number, but it could have easily been 2 or 3. If you instead start from 0, you can omit the "plus X" logic, just as I omitted the "+ 1" and "- 1" logic in my year/century formulae when moving from 1-based to 0-based counting.
- topaz0 4y agoThe romans weren't the only people who knew how to count back then... And how many of the other (presumably arbitrary) choices for smallest number were zero? And why did it take over one thousand years to come up with ordinal "zeroth" after we knew about cardinal "zero"? > It seems that when labeling ... number ... that precede it, plus one. I don't think so. It's the number that you have counted once you've counted that one.
- maxdamantus 4y agoHow do you write zero in Roman numerals? Answer: you can't. Even though they used their number system for adding amounts of money, they hadn't figured out "cardinal zero" yet. It was introduced into western mathematics through Fibonacci in the 1200s at the same time that Hindu-Arabic numerals were adopted, which use "0" as a placeholder (compare this to earlier Greek numerals which work similarly to the system we use today but without placeholders and using different sets of symbols for the different places—and of course no way of representing zero).