Erlang:如何创建循环?

k7fdbhmy  于 2023-04-18  发布在  Erlang
关注(0)|答案(4)|浏览(269)

如何在Erlang中创建一个简单的循环?(例如从1到10的循环。)

2ul0zpep

2ul0zpep1#

创建一个递归结构(循环10次):

loop(0) ->
    ok;
loop(Count) ->
    % do something
    loop(Count-1).

从1到10:

do_loop() ->
    loop(1).

loop(10) ->
    ok;
loop(Count) ->
    % do something
    loop(Count+1).

您也可以使用lists:seq(1, 10)来获取从1到10的序列。

htrmnn0y

htrmnn0y2#

Davin特里翁的代码示例完全符合您的要求:一个从1到10的循环。但是如果你运行这段代码,它只会产生结果ok,没有任何证据表明它真的做了一个循环:从功能的Angular 来看,代码可替换为:

do_loop() -> ok.

它有着完全相同的效果:实际上在erlang中并不常见这样的循环,有一些结构,如list,map,gb_tree,ets...,它们允许以不同的方式遍历数据,并取代命令式语言中常见的循环。
在Erlang中,最常见的循环是无限循环,它允许保持进程活动(你可以在一些C代码中找到while(1))。

ds97pgxw

ds97pgxw3#

-module(ownrecurse).

-export([while/1,while/2, start/0]).

while(L) -> while(L,0).
while([], Acc) -> Acc;

while([_|T], Acc) ->
  io:fwrite("~w~n",[Acc]),
  while(T,Acc+1).

start() ->
  X = lists:seq(1,99),
  while(X).
acruukt9

acruukt94#

创建两个函数(同名),一个用于列表中没有更多元素,另一个用于操作。然后调用函数,它递归调用自己N次。

-module(t1).
-export([start/0,myfor/2]).

myfor(0,_) -> 
   []; 
myfor(N,Term) when N > 0 -> 
    io:format("Hello World~n"),
    myfor(N-1,Term).

start() -> 
    io:format("Hello World~n"),
    myfor(5,1).

相关问题