D言語: 2, 3, 5, 7... のシーケンスを作る

D 言語で、2, 3, 5, 7... のシーケンスを作る方法です。

素数をふるいにかけるとき

  • 2 で割り切れるか
  • 3, 5, 7... で割り切れるか

を試しますが、これらを分離せずにひとつのシーケンスとして扱えると便利ですね。

import std.experimental.all;

void main() {
    // 有限のサイズ
    auto a = chain([2], iota(3, 10, 2));
    writeln(a); // [2, 3, 5, 7, 9]

    // 無限のサイズ
    auto b = chain([2], recurrence!((a, n) => a[n-1] + 2)(3));
    writeln(b.take(10)); // [2, 3, 5, 7, 9, 11, 13, 15, 17, 19]
}