如何在Elixir中实现双循环?

时间:2016-08-23 20:29:19

标签: for-loop elixir

如何在Elixir中实现双重for循环?

我有兴趣编写一个double for循环来比较naiveSort和quickSort实现。

然后我意识到我甚至不知道如何在长生不老药中写一个双循环!

那么,用Elixir写的双循环是怎么回事?请记住,我试图做一个天真的短暂...

1 个答案:

答案 0 :(得分:2)

执行此操作的惯用方法可能是使用列表推导,例如:

defmodule Quick do
  def sort([first | rest]) do
    sort(for(n <- rest, n < first, do: n)) ++
    [first] ++
    sort(for(n <- rest, n >= first, do: n))
  end

  def sort([]) do
    []
  end
end

iex(5)> Quick.sort [5,4,3,2,1]
[1, 2, 3, 4, 5]

当然快速排序非常适合递归解决方案,因为算法是&#34;排序比我小的所有项目,然后添加我,然后添加比我大的所有项目&#34;。这几乎在Elixir(和Erlang)中得到了表达。

for是列表理解。它基于生成器(n <- rest部分和过滤器(n < first部分)构建列表。