我想寫一個類似於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
的解釋將不勝感激!