1.7の機能を使ったら、素数generatorが簡単に作れたよ
spidermonkeyでしか試してません><。
function primes(){ let [n, box] = [2, []]; for(;;){ let a = box.filter(function(e) {return n%e == 0;}); if(a.length==0){ yield(n); box.push(n); } n++; } } var p = primes(); for (let i=0; i < 10; i++){ a.push(p.next()); } print(a.join(", ")); // 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
追記
以下のようにしてmemo化した方がいいかも?
function PRIMES(){ let [n, box] = [3, [2,3]]; return function(){ for each (e in box){ yield e; } for(;;){ let a = box.filter(function(e) {return n%e == 0;}); if(a.length==0){ yield n; box.push(n); } n+=2; } }; } var primes = PRIMES(); var p = primes(); var p2= primes(); var a= []; for (let i=0; i < 10; i++){ a.push(p.next()); } print(a.join(", ")); for (let i=0; i < 10; i++){ print(p2.next()); }