# A counter! How? Aargh

I can’t believe I can’t figure this out or even find the answer in the docs or on the forum…

All I want is a simple function (routine?) that counts from 0 to 7, incrementing each time it is called.

something like this?

``````(
~rout = Routine({
inf.do({|i|
(i.mod(7)).yield;
})
});
)

~rout.next
``````

Thanks. Honestly, I’ve been reading the helpfile on Routine for about two hours now, it still makes no sense to me whatsoever! But, thanks, that’s it. Except mod(8) is what I meant.

And… hmm. Why does it always start from 3?

Two other similar approaches that don’t use routines.

``````~counter = (
current_value: 0,
get_next: { |self|
self.current_value = self.current_value + 1;
self.current_value
}
);

~counter.get_next().mod(8)

~count_globally = {
~count_globally_n = ~count_globally_n ? 0;
~count_globally_n = ~count_globally_n + 1;
~count_globally_n
};

~count_globally.().mod(8)
``````
1 Like
``````a = Pseq((0..7),inf).asStream; // could also be 1 repeat, of course
a.next;
``````

Thanks both. And… I can’t believe I didn’t think of the Pseq solution!

Or:

``````a = Pn(Pseries(0, 1, 8), inf).asStream;
``````

hjh