I’ve been working on this problem for my own language, and have landed on something more clear than just following a convention. Basically you use [] and () to specify if the left and right bounds are included or not (based off of interval notation: https://en.wikipedia.org/wiki/Interval_(mathematics)#Including_or_excluding_endpoints). e.g. for your case
--slice [1:5) # include the left index. don't include the right index
--slice [1:5] # include both left and right index
--slice (1:5] # don't include the left index. include the right index
--slice (1:5) # don't include the left or right index
potentially not relevant to your case, but my version supports an end keyword which you can do math on, similar to python’s negative indexing
[2:end-3] # start at index 2 (included) and go through till the third from last index (included)
(end-3:end] # start at the third from last (excluded) and go to the end (included)
Personally I’m a fan of 0 indexing, but for your context, I think it would depend on how the user sees what they’re slicing. E.g. if it was pages with page numbers, the numbers would indicate if it was 0 or 1 index based. If there’s nothing to actually show the user, I think picking something reasonable and documenting it well is probably the best bet.
I’ve been working on this problem for my own language, and have landed on something more clear than just following a convention. Basically you use
[]
and()
to specify if the left and right bounds are included or not (based off of interval notation: https://en.wikipedia.org/wiki/Interval_(mathematics)#Including_or_excluding_endpoints). e.g. for your case--slice [1:5) # include the left index. don't include the right index --slice [1:5] # include both left and right index --slice (1:5] # don't include the left index. include the right index --slice (1:5) # don't include the left or right index
potentially not relevant to your case, but my version supports an
end
keyword which you can do math on, similar to python’s negative indexing[2:end-3] # start at index 2 (included) and go through till the third from last index (included) (end-3:end] # start at the third from last (excluded) and go to the end (included)
Personally I’m a fan of 0 indexing, but for your context, I think it would depend on how the user sees what they’re slicing. E.g. if it was pages with page numbers, the numbers would indicate if it was 0 or 1 index based. If there’s nothing to actually show the user, I think picking something reasonable and documenting it well is probably the best bet.