Vorrei scrivere una funzione simile a List.concat/1 che accetta un elenco di elenchi ed emette gli elenchi concatenati come un flusso continuo.Concatenare tranquillamente un elenco di elenchi
che avrebbe funzionato in questo modo:
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]
Quello che ho elaborato finora è questo:
defmodule MyStream do
def concat(lists) do
Enumerable.reduce(lists, [], fn(x, acc) -> acC++ x end)
end
end
Questo produce il risultato corretto, ma, ovviamente, non è pigro.
Ho provato senza successo utilizzando Stream.Lazy
ma non riesco davvero a capire il funzionamento interno di esso. Qualsiasi spiegazione su Stream.Lazy
sarebbe molto apprezzata!