<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整合有些困难。