無限リストとFizzBuzz、yield
???㡼???ѿ?(sharp variables) - oct inaoduで、リテラルに循環したオブジェクトを書けることを知ったので、
JSEnumerator –
CodeRepos::Share – Trac
のサンプルのFizzBuzzを、それを使って書き直してみた。
function cycle(list) { var ret = [, list]; while (ret = ret[1]) if (ret) yield ret[0]; } function zip() { try { for (;;) { var ret = []; for (var i = 0;i < arguments.length;++i) ret.push(arguments[i].next()); yield ret; } } catch (error if error instanceof StopIteration) {} } function upper(n) { for (var i = n;;++i) yield i; } for ( var [fizz, buzz, i] in zip( cycle(#1=["", ["", ["Fizz", #1#]]]), cycle(#1=["", ["", ["", ["", ["Buzz", #1#]]]]]), upper(1))) { console.log(fizz + buzz || i); if (i >= 100) break; }