独特的 Erlang -- Eralng 学习笔记 (1)

A language that doesn’t affect the way you think about programming is
not worth knowing. --- Alan Perlis

Erlang 虽然是门小众的语言,在并发方面十分出色,有其独特的哲学和语法,是一门很值得了解的语言。]
下面介绍一下 Erlang 比较有特色的地方。

Pattern matching

如果一个变量,没有值,则可以用来做赋值。比如 X = 1.

A = [1, 2, 3].
[H|T] = A.
H = 1.
T = [2, 3].

也可以用来做检查:

point % 以小写字母开头的是 atome,有些类似 ruby 的 symbol
Point = {point, 10, 45}.

{point, X, Y} = Point.  % X = 10, Y = 45
{abc, X, Y} = Point.
% ** exception error: no match of right hand side value {point,10,45}

{point, Z, Z} = Point.
% ** exception error: no match of right hand side value {point,10,45}

用来做 dispatch:

area({rectangle, Width, Ht}) -> Width * Ht;
area({circle, R})            -> 3.14159 * R * R.
Guards

guards 类似 ruby 的 case,区别是可以用来定义方法,这样,一个方法就被分解成了不同部分,使 Erlang 的方法变得更短。

max(X, Y) when X > Y -> X;
max(X, Y) Y.

filter:

filter(P, [H|T]) ->
    case P(H) of
        true  -> [H|filter(P, T)];
        false -> filter(P, T) end;
filter(P, []) ->
    [].

更短的 filter:

filter(P, [H|T]) ->  filter1(P(H), H, P, T);
filter(P, [])    ->  [].

filter1(true, H, P, T)  -> [H|filter(P, T)];
filter1(false, H, P, T) -> filter(P, T)

递归

sum([], N)    -> N;
sum([H|T], N) -> sum(T, H+N).

在 Erlang 中,递归被大量使用。
递归有两个好处,一个是可以用来分解问题,使问题变得很容易处理。
一个是,递归可以显示的维护状态,避免了赋值,维持了 immutable,方便维护和方便并发。

小结

Erlang 非常独特,这些独特之处可以帮助、规范程序员分解问题,让 Erlang 的代码变得更好维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值