【问题标题】:Lazy list comprehension in Elixir?Elixir 中的惰性列表理解?
【发布时间】:2016-07-04 00:39:32
【问题描述】:

有没有办法让 Elixir 中的列表理解变得懒惰?如果没有,有没有办法把它变成Stream

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

这段代码 sn-p 占用了太多内存,导致我的程序崩溃。

我想在 my_list 上应用过滤器、映射和缩减。

【问题讨论】:

    标签: stream list-comprehension elixir


    【解决方案1】:

    理解是一张平面地图。所以你的代码相当于:

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

    我已经为未来的 Elixir 版本提出了“流”和“并行”,但它正在等待对该语言的一些其他改进。

    【讨论】:

    • 谢谢,何塞!我知道你是 Elixir 语言的创造者,但到目前为止,你回答我关于 Elixir 的所有 SO 问题让我大吃一惊。我是个大粉丝。我知道你不是人类,我的意思是最好的方式。