如何在Erlang中创建一个简单的循环?(例如从1到10的循环。)
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的序列。
lists:seq(1, 10)
htrmnn0y2#
Davin特里翁的代码示例完全符合您的要求:一个从1到10的循环。但是如果你运行这段代码,它只会产生结果ok,没有任何证据表明它真的做了一个循环:从功能的Angular 来看,代码可替换为:
do_loop() -> ok.
它有着完全相同的效果:实际上在erlang中并不常见这样的循环,有一些结构,如list,map,gb_tree,ets...,它们允许以不同的方式遍历数据,并取代命令式语言中常见的循环。在Erlang中,最常见的循环是无限循环,它允许保持进程活动(你可以在一些C代码中找到while(1))。
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).
acruukt94#
创建两个函数(同名),一个用于列表中没有更多元素,另一个用于操作。然后调用函数,它递归调用自己N次。
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).
4条答案
按热度按时间2ul0zpep1#
创建一个递归结构(循环10次):
从1到10:
您也可以使用
lists:seq(1, 10)
来获取从1到10的序列。htrmnn0y2#
Davin特里翁的代码示例完全符合您的要求:一个从1到10的循环。但是如果你运行这段代码,它只会产生结果ok,没有任何证据表明它真的做了一个循环:从功能的Angular 来看,代码可替换为:
它有着完全相同的效果:实际上在erlang中并不常见这样的循环,有一些结构,如list,map,gb_tree,ets...,它们允许以不同的方式遍历数据,并取代命令式语言中常见的循环。
在Erlang中,最常见的循环是无限循环,它允许保持进程活动(你可以在一些C代码中找到while(1))。
ds97pgxw3#
acruukt94#
创建两个函数(同名),一个用于列表中没有更多元素,另一个用于操作。然后调用函数,它递归调用自己
N
次。