You have several options, either directly implementing incr
incr[digs_, base_] := Module[{carry = 1, ndigs = digs, k = 1, nd},
While[k <= Length[digs],
{carry, nd} =
QuotientRemainder[Part[ndigs, k] + carry, Part[base, k]];
Part[ndigs, k] = nd;
If[carry == 0, Break[]]; k++;
];
ndigs
]
Or implementing FromMultpleBase and ToMultipleBase functions to make your tuple to a natural number, and back:
FromMultipleBase[digs_, base_] := digs.FoldList[Times, 1, Most[base]]
ToMultipleBase[num_, base_] :=
Part[Rest[
FoldList[QuotientRemainder[Last[#1], #2] &, {0, num},
Reverse[FoldList[Times, 1, Most[base]]]]],
Range[Length[base], 1, -1], 1]
Here is the usage:
In[152]:= NestList[inc[#, {10, 5, 3}] &, {8, 3, 1}, 12]
Out[152]= {{8, 3, 1}, {9, 3, 1}, {0, 4, 1}, {1, 4, 1}, {2, 4, 1}, {3,
4, 1}, {4, 4, 1}, {5, 4, 1}, {6, 4, 1}, {7, 4, 1}, {8, 4, 1}, {9, 4,
1}, {0, 0, 2}}
In[153]:= FromMultipleBase[#, {10, 5, 3}] & /@ %
Out[153]= {88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100}
In[154]:= NestList[
ToMultipleBase[
FromMultipleBase[#, {10, 5, 3}] + 1, {10, 5, 3}] &, {8, 3, 1}, 12]
Out[154]= {{8, 3, 1}, {9, 3, 1}, {0, 4, 1}, {1, 4, 1}, {2, 4, 1}, {3,
4, 1}, {4, 4, 1}, {5, 4, 1}, {6, 4, 1}, {7, 4, 1}, {8, 4, 1}, {9, 4,
1}, {0, 0, 2}}