gpt4 book ai didi

elixir - 是否可以在 elixir 中的流上运行 reduce?

转载 作者:行者123 更新时间:2023-12-05 01:32:03 25 4
gpt4 key购买 nike

是否可以减少 elixir 中的 Stream?

我看到 Stream.scan 但它不返回累加器。

file_stream
|> Stream.each(&parse_line/1)
|> Enum.reduce(&reduce_fn/2)

我似乎遇到了以下问题,但想知道是否可以这样做?

最佳答案

减少流是没有意义的。 Enum 模块与 Stream 中的函数之间的核心区别在于,前者是贪婪的,而后者是惰性的。

也就是说,Stream 会产生一组转换,这些转换可以在每个集合的元素基础上延迟应用,并通过。

但是reduce(又名foldl)已经是一种有效的贪心操作,如果不遍历整个集合就无法得到结果。 (这就是为什么 Stream.scan/3 不返回累积值的原因。)


枚举

#  ===== code =====        ===== piped through =====
[1, 2, 3] # [1, 2, 3]
# # ⇓
|> Enum.map(&IO.inspect/1) # [1, 2, 3]
# # ⇓
|> Enum.map(&IO.inspect/1) # [1, 2, 3]

#⇒ 1 2 3 1 2 3

#  ===== code =====        ===== piped through =====
[1, 2, 3] # 1 2 3
# # ⇓ ⇓ ⇓
|> Stream.map(&IO.inspect/1) # 1 2 3
# # ⇓ ⇓ ⇓
|> Stream.map(&IO.inspect/1) # 1 2 3
|> Enum.to_list() # termination!
# # ⇒ ⇒ ⇒

#⇒ 1 1 2 2 3 3

关于elixir - 是否可以在 elixir 中的流上运行 reduce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65803694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com