`
yjl49
  • 浏览: 109964 次
社区版块
存档分类
最新评论

Erlang 尾递归

 
阅读更多

         尾递归就是在一系列语句的最后又跳转到被调用函数的开头。这里的“最后”两个字很关键,不正确的递归调用会吃光你的内存。

litaocheng 在他的blog中就提到过一个很好的例子:here

 

    观察下面的代码:

 

do_t1() ->
     try
         recive 
            _->
               do_t1()
         end
     catch
          _:_ ->
              do_t1()
     end.
 

    这段代码之所以不是尾递归是因为:在未抛出异常的情况下,函数中最后一个语句是try....catch 而不是 do_t1/0

    如果非要把以上代码改成尾递归,那么该怎么改呢?

 

   以下两段代码哪个正确?

do_t1() ->
     receive
         _ ->
           try

             do_t1()

           catch
               _:_ ->
                 do_t1()
           end
    end.

 

do_t1() ->
     receive
         _ ->
           try

             .......

           catch
               _:_ ->
                 do_t1()
           end,
           do_t1()
    end.

    如果要对原文中的以下代码进行改造(这里不考虑gen_server),那么应该如何修改?

send_msg(Socket, Pid) ->
   try
        receive
            {send, Bin} ->
                ...
            {inet_reply, _Sock, Result} ->
               ...
   catch
       _:_ ->
           send_msg(Sock, Pid)
   end.
 

    参考以下代码:

send_msg(Socket, Pid) ->
   Result= 
   try
        receive
            {send, Bin} ->
                ...
            {inet_reply, _Sock, Result} ->
               ...
   catch
       _:_ ->
           {error,"exception"}
   end,

   case Result of
       {error,_Er}->
          send_msg(Sock, Pid);
       Else->
            Else
   end
.
 

 

 

 

 

 

 

分享到:
评论

相关推荐

    erlang编程 Introducing Erlang

    erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent

    erlang_版本24.3.4.4

    erlang 安装包

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang及其应用Erlang及其应用

    Erlang及其应用Erlang及其应用Erlang及其应用

    erlang otp25 win安装包

    erlang otp25 win安装包

    erlang25.0 windows版本

    erlang25.0 windows版本

    erlang22最新下载包

    erlang22最新下载包 erlang22.1.tar.gz erlang22最新下载包 erlang22最新下载包

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    Erlang趣学指南

    (494页带目录的高清扫描版) 这是一本讲解Erlang编程语言的入门指南,内容通俗...内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。

    Erlang26-windows安装包

    RabbitMQ version Minimum required Erlang/OTP Maximum supported Erlang/OTP Notes 3.13.0 26.0 26.2.x The 3.13 release series is compatible wtih Erlang 26. OpenSSL 3 support in Erlang is considered to ...

    esl-erlang_23.0_windows_amd64.exe rabbitmq-server-3.8.4.exe

    esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...

    erlang文献及资料汇总

    erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 ...

    erlang 中文基础教程

    erlang 中文基础教程erlang 中文基础教程

    可在ubuntu上安装erlang的deb包

    This package contains the Erlang/OTP runtime implementation, which is configured and built with HiPE support (allows compiling to native code), and minimal set of Erlang applications: compiler - ...

    Erlang编程指南

    《erlang编程指南》是对erlang语言的深入介绍。erlang是任何必须并发、容错和快速响应的环境的理想编程...本书的重点集中在解释erlang的语法和语义,并且介绍了其模式匹配、规范列表、递归、调试、网络和并发性等内容。

    erlang资源

    erlang资源,非常值得下载,二郎学习

    introducing erlang

    Erlang特性: ● 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。 ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang...

    erlang安装包.zip

    erlang安装包

    rabbitMq和erlang安装包

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。

Global site tag (gtag.js) - Google Analytics