因为Erlang里的变量只能一次赋值,所以并没有循环语句,只能用递归。所以所谓的Erlang for循环,也是用递归模拟的。看下面的求和代码:
for(Max, Max,Sum) ->
Sum+Max;
for(First, Max,Sum) ->
Sum2=Sum+First,
for(First + 1, Max, Sum2).
值得注意的是,如果循环次数过多,我们必须使用 尾递归。否则你的内存很快就会用光。尾递归我的理解是,调用了自身后,再没有别的代码要执行,概念上要说清楚还是比较 麻烦,各位意会吧。
下面是一个 非尾递归的示例:
loop() ->
{From, {rectangle, Width, Ht}} ->
From ! {self(), Width * Ht},
loop(),
someOtherFunc();
{From, {circle, R}} ->
From ! {self(), 3.14159 * R * R},
loop().
尽管尾递归不用消耗更的内存,然而它的效率仍然让我不敢恭维,我测试过1到100万的求和。用java的for循环实现,几乎是0秒就完成了,而用erlang的尾递归,却花了我33秒。下面是我的测试代码,如果你有更好的erlang实现,还请分享
main(_) ->
Start = calendar:datetime_to_gregorian_seconds({date(), time()}),
T=for(1,10000,0),
End = calendar:datetime_to_gregorian_seconds({date(), time()}),
io:format("~p ~p~n",[T,End-Start]).
for(Max, Max,Sum) ->
Sum+Max;
for(First, Max,Sum) ->
Sum2=Sum+First,
for(First + 1, Max, Sum2).
分享到:
相关推荐
一本简约的Erlang语言入门书, 本书涵盖了从Erlang的起源到广泛应用的高可靠消息专递系统。
Erlang入门:构建application练习3,实例演示如果构建一个最简单的Erlang Application
Erlang不但是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性:并发线程、作业调度、内存管理、分布式、网络化等。据说使用Erlang编写的Yaws Web服务器,其并发性能是apache的15倍!
Erlang入门:构建application练习5(监督树),以实例完全演示监督树的用法,Erlang入门必须知道的那点事
Erlang入门:构建application练习4(进程link的作用),实例演示进程link的作用及效果
erlang是爱立信开发的程序开发语言,融合了函数式编程与面向对象编程,并行处理内建与程序语言内部,特别适合创建并发行、容错性、分布性要求比较高的软实时系统,掌握它程序员必备的一种编程技能,与它相似的语言...
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...
erlang程序设计 erlang入门手册
Erlang的入门介绍ppt,英文的,但是比较有味道.
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
很不错的erlang学习资料。推荐刚上手的同学下载学习。
erlang编程语言圣经 erlang从业人员的必备书籍 erlang语言开发入门
Erlang is the language of choice for programmers who want to write robust, concurrent applications, but its strange syntax and functional design can intimidate the uninitiated. Luckily, there's a new ...
这个的确是个erlang入门的很好的教材,它通俗易懂,语言新意。
assumes no responsibility for errors or omissions,or for damages that may result from the use of information(including program listings)contained herein. Our Pragmatic courses,workshops,and other ...
该文档简要介绍了一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
erlang-20.3.4 rabbitmq3.7.4 yum安装erlang yum安装rabbitmq
NULL 博文链接:https://jias.iteye.com/blog/557863
(494页带目录的高清扫描版) 这是一本讲解Erlang编程语言的入门指南,内容通俗...内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。
erlang基础教程,比较适合初学者学习使用