我想写一个类似于List.concat/1的函数,它接受一个列表的枚举并将连续列表作为一个连续的流发送。Lazily连接一个枚举列表
它的工作是这样的:
iex> 1..3 |> Stream.map(&([&1])) |> Enum.to_list
[[1], [2], [3]]
iex> 1..3 |> Stream.map(&([&1])) |> MyStream.concat |> Enum.to_list
[1, 2, 3]
我想出到目前为止是这样的:
defmodule MyStream do
def concat(lists) do
Enumerable.reduce(lists, [], fn(x, acc) -> acC++ x end)
end
end
这将产生正确的结果,但显然是不能偷懒。
我没有成功尝试使用Stream.Lazy
,但真的无法理解它的内部工作原理。任何关于Stream.Lazy
的解释将不胜感激!