📅  最后修改于: 2020-11-04 09:10:48             🧑  作者: Mango
由于不可变性,Elixir中的循环(与任何功能性编程语言一样)与命令性语言的编写方式不同。例如,使用C这样的命令式语言,您将编写-
for(i = 0; i < 10; i++) {
printf("%d", array[i]);
}
在上面给出的示例中,我们同时对数组和变量i进行了变异。在Elixir中无法进行突变。相反,函数式语言依赖于递归:递归地调用函数,直到达到阻止递归操作继续进行的条件为止。在此过程中,没有数据发生突变。
现在,让我们使用递归编写一个简单的循环,该循环可打印n次问候。
defmodule Loop do
def print_multiple_times(msg, n) when n <= 1 do
IO.puts msg
end
def print_multiple_times(msg, n) do
IO.puts msg
print_multiple_times(msg, n - 1)
end
end
Loop.print_multiple_times("Hello", 10)
运行上述程序时,将产生以下结果-
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
我们利用函数的模式匹配技术和递归来成功实现循环。递归定义很难理解,但是将循环转换为递归很容易。
Elixir为我们提供了Enum模块。该模块用于最迭代的循环调用,因为使用它们比试图找出相同的递归定义要容易得多。我们将在下一章中讨论这些内容。只有在找不到使用该模块的解决方案时,才应使用您自己的递归定义。这些函数经过尾调用优化,并且速度很快。