Ruby

def cycle(collection)
  index = -1
  lambda do
    index += 1
    collection[index % collection.size]
   end
end

c = cycle(['red', 'green', 'blue'])

4.times.map do
  c.call
end # => => ["red", "green", "blue", "red"]

Javascript

function cycle(coll) {
    var idx = -1;
    return function() {
        idx += 1;
        return coll[idx % coll.length];
    }
}

c = cycle(['red', 'green', 'blue'])
Array(4).fill(null).map(function() {
    return c();
}) // => ["red", "green", "blue", "red"]