Erlang 循环(while和for)

Erlang是一个函数式编程语言,是需要记住所有函数的编程语言,它们不提供任何的循环结构。而函数式编程取决于一个概念叫做递归。

while 语句

由于在 Erlang 中没有可直接使用的 while 语句,就必须使用递归技术在 Erlang 中来实现 while 语句。

我们将努力遵循 while 循环的实现,如在其他编程语言中一样。以下是遵守一个流程:

while循环实现

让我们来看看如何使用递归来在 Erlang 中实现 while 循环的例子。

示例

  1. -module(helloworld).
  2. -export([while/1,while/2, start/0]).
  3. while(L) -> while(L,0).
  4. while([], Acc) -> Acc;
  5. while([_|T], Acc) ->
  6. io:fwrite("~w~n",[Acc]),
  7. while(T,Acc+1).
  8. start() ->
  9. X = [1,2,3,4],
  10. while(X).

以下是上述程序需要说明的一些关键点

  • 定义一个名为 while 递归函数执行 while 循环;

  • 输入列表的值在定义变量X到 while 功能作为一个实例;

  • while 功能同时会取到每个列表中的值并存储中间值到变量“‘Acc’”;

  • while循环递归调用列表中的每个值;

上面的代码的输出结果是:

  1. 0
  2. 1
  3. 2
  4. 3

for 语句

由于在 Erlang 没有直接可用的 for 语句,人们必须使用 Erlang 递归技术实现 for 语句。

我们将实例一些代码功能之后让它能够和其他编程语言一样地执行 for 循环。以下是 for 语句实现的流程:

for循环

让我们来看看如何在 Erlang 使用递归来实现 for 循环的例子。

示例

  1. -module(helloworld).
  2. -export([for/2,start/0]).
  3. for(0,_) ->
  4. [];
  5. for(N,Term) when N > 0 ->
  6. io:fwrite("Hello~n"),
  7. [Term|for(N-1,Term)].
  8. start() ->
  9. for(5,1).

以下是上述程序需要说明的一些关键点

  • 我们定义一个递归函数来实例和执行 for 循环;

  • 我们使用的是 ‘for’ 函数以确保 N 或限制的值是正值;

  • 我们递归地调用 for 函数,通过在每一次递归后减少N的值。

上面的代码的输出结果是:

  1. Hello
  2. Hello
  3. Hello
  4. Hello
  5. Hello