Erlang
起步
% 注释2 + 2.0."str".[1, 2, 3].Var = 1. % 定义变量
原子 列表 元组
Color = red. % red是一个原子 赋值给Color[1,2,"ds"]. % 列表是异质变长的{1, 2 , "3"}. % 元组是变长的
模式匹配
{X, Y} = {1, 2}.[One|Two = [1,2,3,4]. % Two 匹配剩下的那些All = <<W:4, Z:4>>. % 位匹配<<A:4, B:4>> = All.
函数
-module(basic).-export([mirror/1, number/1]).-export([sum/1]).mirror(Anything) -> Anything.number(one) -> 1. % 模式匹配sum(0) -> 0;sum(1) -> 1;sum(N) -> N + sum(N-1). % 递归
控制结构
Animal = "dog".case Animal of "dog" -> "bark"; "cat" -> "mow"; _ -> "unknow"end.
X = 0.if X >=0 -> positive; X <0 -> negativeend.
匿名函数
Add = fun(A, B) -> A+B end.Add(1,2).
列表与高阶函数
Numbers = [1,2,3].lists:foreach(fun(I) -> io:format("~p~n",[I]) end, Numbers). % 迭代lists:map(fun(I) -> I * I end, Numbers). % 映射\lists:filter(fun(I) -> I > 1 end, Numbers).lists:all(fun(I) -> I > 1 end, Numbers).lists:any(fun(I) -> I > 1 end, Numbers).lists:foldl(fun(I,SUM) -> I + SUM end, 0, [1,2,3,4,5]). % reduce
并发
-module(translate).-export([loop/0]).loop() -> receive % 接收消息 "chinese" -> io:format("中文"), loop(); "dog" -> io:format("狗"), loop(); _ -> io:format("未知"), loopend.
Pid = spawn(fun translate:loop/0). % 启动轻量级进程Pid ! "chinese". % 发送消息
-module(translate).-export([loop/0,translate/2]).loop() -> receive { Form, "chinese"} -> Form ! "ccc", loop(); { Form, "dog"} -> Form ! "ddd", loop(); { Form, _ } -> Form ! "uuu", % 发送 loopend.translate(Pid, Word) -> Pid ! {self(), Word}, % 同步发送 receive Trans -> Trans end.
translate:translate(Pid, "dog").
核心优势
- 可靠
- 轻量 无共享的进程
- OTP 企业级别的库
- 随他崩溃
不足