【问题标题】:Erlang: How to make a loop?Erlang:如何做一个循环?
【发布时间】:2020-04-25 00:40:35
【问题描述】:

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

【问题讨论】:

    标签: erlang


    【解决方案1】:

    创建一个递归结构(循环 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 的序列。

    【讨论】:

      【解决方案2】:

      来自 Davin Tryon 的代码示例完全符合您的要求:从 1 到 10 的循环。但是如果您运行此代码,它只会产生 ok 的结果,没有任何证据表明它确实产生了循环:从功能点看来代码可以替换为:

      do_loop() -> ok.
      

      它具有完全相同的效果:它产生的结果是好的。事实上,在 erlang 中通常不做这样的循环,有一些结构,例如 list、map、gb_tree、ets...,它们允许以不同的方式遍历数据并替换您在命令式语言中可以找到的通常循环。

      在 Erlang 中,最常见的循环是无限循环,它允许进程保持活动状态(您可以在某些 C 代码中找到 while(1))。

      【讨论】:

        【解决方案3】:
        -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).
        

        【讨论】:

          猜你喜欢
          • 2019-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-07
          • 2020-08-09
          • 2021-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多