在Elixir中生成无限序列

时间:2017-01-18 18:39:38

标签: elixir

如何使用Stream库函数实现无限序列生成器?

我想用它来生成前n个素数。我有一个有效的递归方法,但我更喜欢枚举和管道。

我在使用生成器的python中看到过这个:

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

是否有内置函数在Elixir中生成此类序列,或者是一种简单的DIY替代品?这种模式在Elixir中有名称吗?

2 个答案:

答案 0 :(得分:5)

您至少有两个选项可以在Elixir中生成流。最通用的是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))

答案 1 :(得分:2)

Stream.iterate/2来救援:

number_format()