【发布时间】:2020-08-30 18:39:38
【问题描述】:
我最近看了这个interesting video on the computerphile 并决定使用 JavaScript 生成器来实现筛子算法。总的来说,我对 JavaScript 非常有信心,但之前从未直接使用过生成器。
这是我目前所拥有的:
function* nextNaturalNumber(n) {
yield n;
yield* nextNaturalNumber(n + 1);
}
function* sieve(n) {
let count = 0;
let g = nextNaturalNumber(2);
while (count++ < n) {
const possiblePrime = g.next().value;
yield possiblePrime;
// here's where I'm stuck:
// how can I filter the values from the nextNaturalNumber-generator stream that are not divisible by 2?
}
}
// print the first 10 primes
for (const prime of sieve(10)) {
console.log(prime);
}
正如代码评论中提到的,我一直坚持如何从生成器流中过滤不能被 2 整除的值,从而执行“筛子”操作。在 JavaScript 中是否有一种简单的方法来做到这一点(如在 Python 中使用yield from sieve(i for i in s if i%n !=0))?
【问题讨论】:
-
在您的 python 代码中,您似乎将迭代器传递给
sieve,而不是数字。您是否也尝试在 JS 中复制它?
标签: javascript generator