[elixir! #0083] Stream.transform 的用法

【[elixir! #0083] Stream.transform 的用法】在 elixir 里可以用 Stream 来表示无限长的序列,例如 0,1,2,3... 就可以表示为:

iex> s = Stream.iterate(0, & &1 + 1) #Function<62.50989570/2 in Stream.unfold/2>

如果我们想要计算这个数列中每5个数的和,就可以使用 Stream.transform 函数:
iex> s1 = Stream.transform(s, {0, 0}, fn x, {sum, count} -> ...> if count == 5 do ...> {[sum], {x, 1}} ...> else ...> {[], {sum + x, count + 1}} ...> end ...> end) #Function<60.50989570/2 in Stream.transform/3> iex> Enum.take(s1, 10) [10, 35, 60, 85, 110, 135, 160, 185, 210, 235]

它是 Enum.flat_map_reduce 的 Stream 版本。

    推荐阅读