I'm partial to the viciously set-theoretic[0]:
for i in 5: print i # 0;1;2;3;4
1: aka naturals or nonnegative/unsigned integers
A popular way to partition an array at i and j is to do:
arr[0..<i], arr[i..<j], arr[j...-1]
a0,a1,a2 = arr.splitat({i,j})
I'm partial to the viciously set-theoretic[0]:
0: finite ordinals[1] are 0={},1={{}}={0},2={{},{{}}}={0,1},3={{},{{}},{{},{{}}}}={0,1,2},Sx=x∪{x}={0,...,x}1: aka naturals or nonnegative/unsigned integers