elixir - 在 Elixir 中生成无限序列

标签 elixir

我如何实现一个无限序列生成器,我可以使用 Stream 操作它库函数?

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

我已经看到使用生成器在 python 中完成的:

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

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

最佳答案

您至少有两个选项可以在 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))

关于elixir - 在 Elixir 中生成无限序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41727028/

相关文章:

elixir - 如何将 RethinkDB 与 Phoenixframework 一起使用?

elixir - 理解 Elixir 中的折叠

javascript - Phoenix - 使用数据表的站点范围搜索功能

elixir - 如何映射 map 列表并添加它们?

elixir - 有根 Elixir 模块吗?

exception-handling - Elixir:正确的打印方式__STACKTRACE__

Elixir-是否可以捕获键值对?

elixir - 使用 Ecto 批量插入

elixir - 从 Elixir 的列表中删除最后一个元素?

oauth-2.0 - 由于 OAuth2 包中的错误原因而返回元组 { :option, :server_only, :honor_cipher_order}