(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

Cycle Generator

なるものを書いてみた。 Lazy.js を使って。

var _ = require('lazy.js');

var logger = function(x){console.log(x);};

var cycleGenerator = function(args){
  var _args = args || [1,2,3,4,5],
      _size = _args.length;

  return _.generate(function(i){
    return _args[i % _size];
  });
};

cycleGenerator([1,2,3]).take(10).each(logger); // -> 1,2,3,1,2,3,1,2,3,1

Generate 系はアイデア次第で色々作れるから面白い。

追記

純粋な JavaScript バージョン

var cycleGenerator = (function(args){
  var _args = args || [1,2,3,4,5],
      _size = _args.length;

  return (function*(){
    var i=0;
    while(true){
      yield _args[i % _size];
      i++;
    }
  }());
}());

logger(cycleGenerator.next().value);
logger(cycleGenerator.next().value);