如何在Elixir中实现双重for循环?
我有兴趣编写一个double for循环来比较naiveSort和quickSort实现。
然后我意识到我甚至不知道如何在长生不老药中写一个双循环!
那么,用Elixir写的双循环是怎么回事?请记住,我试图做一个天真的短暂...
答案 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
部分)构建列表。