2015-09-07 14 views
5

Czy istnieje sposób na leniwy spis treści w eliksiru? Jeśli nie, czy istnieje sposób, aby zmienić to w Stream?Leniwe zrozumienie listy w eliksiru?

my_list = for i <- (1..1000000), j <- (1..1000000), do: {i, j}

Ten fragment kodu wieje mój program poprzez podejmowanie zbyt dużo pamięci.

Chcę zastosować filtr, mapę i zmniejszyć na my_list.

Odpowiedz

18

Zrozumienie jest płaską mapą. Więc twój kod jest równoważny:

Stream.flat_map 1..1000000, fn i -> 
    Stream.flat_map 1..1000000, fn j -> 
    [{i, j}] 
    end 
end 

I zaproponowali „strumień za” i „równoległy dla” dla przyszłych wersjach Elixir, jednak czeka kilka innych ulepszeń języka.

+7

Dzięki, José! Znałem cię jako twórcę języka Elixir, ale do tej pory myślałeś, odpowiadając na wszystkie moje pytania dotyczące SO na Elixir. Jestem wielkim fanem. Wiem, że nie jesteś człowiekiem, i mam na myśli to w najładniejszy możliwy sposób. –