七周七语言之Erlang代码学习

<pre name="code" class="plain">% Hello world
"Hello world!".  % 每句都以.结束
% hello_world.erl
-module (hello_world).   % 声明模块
-export ([hello/0]).          % 声明方法

hello() -> "Hello World!". % 实现方法
 实际操作效果: 


%递归--实现阶乘和斐波那契数列
-module (yet_again).
-export ([another_factorial/1]).
-export ([another_fib/1]).

another_factorial(0) -> 1;
another_factorial(N) -> N * another_factorial(N-1).

another_fib(0) -> 1;
another_fib(1) -> 1;
another_fib(N) -> another_fib(N-1) * another_fib(N-2).

%链接进程以获得可靠性
% roulette.erl--输入数字,若为3就终止进程
-module (roulette).
-export ([loop/0]).

% send a number, 1-6
loop() ->  % 循环
  receive  % 处理输入并将结果发送回去
      3 -> io:format("bang.~n"), exit({roulette,die,at,erlang:time()});
      _ -> io:format("click~n"), loop()
end.
% dotcor.erl--判断进程的状态,若处于终止状态,进行重启
-module (doctor).
-export ([loop/0]).

loop() ->
  process_flag(trap_exit, true),
  receive
    new ->
      io:format("Creating and monitoring process.~n"),
      register(revolver, spawn_link(fun roulette:loop/0)),
      loop();

    {'EXIT', From, Reason} ->
      io:format("The shooter ~p died with reason ~p.", [From, Reason]), io:format(" Restarting. ~n"),
      self() ! new,
      loop()
  end.


优势:
1.动态和可靠性:Erlang本身就是为可靠性而生的,擅于构建可靠的分布式系统。
2.轻量级、无共享资源的进程:Erlang是建立在强制要求不变形的哲学之上的,因此程序员构建的系统从根本上就不太可能因为互相冲突而产生致命错误。Erlang拥有消息传递范型和原语,因此它可以轻易的写出带有一定的分离性的应用程序。
3.OTP--企业级的库:Erlang是在电信企业中成长起来的语言,对可用性和可靠性都有很高的要求,并且拥有完善的企业级库,对于容错性、可扩展性、事务完整性和热插拔性等都有良好的支持。
4.就让它崩溃它:Erlang处理进行的策略就是‘就让它崩溃吧’,你不必理会进程为什么崩溃,因为你只要重启它就好。


不足:
1.语法:由于Erlang源于Prolog语言,因此语法上并不是很友好。增加了学习的难度。
2.整合:与Java整合有些困难。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值