Я хотел бы написать функцию, сходную с 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
было бы благодарно!