返回介绍

循环

发布于 2021-05-25 13:29:45 字数 902 浏览 1006 评论 0 收藏 0

由于不变性,Elixir中的循环(如在任何函数式编程语言中)与命令式语言的编写方式不同。 例如,在像C这样的命令式语言中,你会写 -

for(i = 0; i < 10; i++) {
   printf("%d", array[i]);
}

在上面给出的例子中,我们正在改变数组和变量i 。 Elixir无法进行变异。 相反,函数语言依赖于递归:递归调用函数,直到达到阻止递归操作继续的条件。 此过程中没有数据发生变异。

现在让我们使用递归打印hello 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 module 。 此模块用于大多数迭代循环调用,因为使用它们比尝试计算相同的递归定义要容易得多。 我们将在下一章讨论这些内容。 只有当您找不到使用该模块的解决方案时,才应使用您自己的递归定义。 这些函数是尾调用优化的并且非常快。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文