2017-01-18 2 views
2

Streamライブラリ関数を使用して操作できる無限シーケンスジェネレータを実装するにはどうすればよいですか?エリクシルで無限のシーケンスを生成する

これを使って最初のn個の素数を生成します。私は作業再帰的なアプローチを持っていますが、私は列挙型とパイプをもっと良くしています。

私は、これは発電機を使用してpythonで行わ見てきました:

def number_generator(): 
    n = 3 
    while True: 
    yield n 
    n += 2 

はエリクサーでこのような配列を生成するための組み込み関数、または容易なDIYの代替はありますか?このパターンにはエリクサーの名前がありますか?

答えて

4

あなたはエリクサーでストリームを生成するには、少なくとも2つのオプションがあります。最も一般的なはStream.unfold

Stream.unfold(3, fn(x) -> {x, x + 2} end) 

# or 

Stream.unfold(3, &({&1, &1 + 2})) 

ですが、あなたのケースであなたは単純Stream.iterate

Stream.iterate(3, fn(x) -> x + 2 end) 

# or 

Stream.iterate(3, &(&1 + 2)) 
+0

恐ろしい使用することができます!ちょうど私が必要なもの。 –

2

Stream.iterate/2が救助に来る:

generator = Stream.iterate(3, &(&1+2)) 
#⇒ #Function<61.8243704/2 in Stream.unfold/2> 
generator |> Enum.take(5) 
#⇒ [3, 5, 7, 9, 11] 
関連する問題