Erlang顺序型编程

1、模块

模块是Erlang中代码的基本单元,我们编写的所有函数都存于模块之中。模块文件存放在以.erl为扩展名的文件中。模块名字与文件名需一致,运行前先得把文件编译成.beam文件。简单模块文件如下:

geometry.erl

-module(geometry).

-export([area/1]).

area({rectangle,Width,Ht}) ->Width * Ht;

area({circle,R})                 -> 3.14159 * R * R.

 2、Erlang console切换目录

cd("c:/work")进行切换目录

3、fun

fun就是匿名函数。

Z = fun(X) ->2*X end.

Z(2).

4、以fun为参数的函数

list是标准库中的一个模块,从中导出很函数都是以fun作为参数的。

lists:map(F,L) ---将函数应用到列表L的每一个元素上,并返回一个新列表。

lists:filter(P,L)----返回一个新列表,新列表由列表L中每一个能满足P(E)为true的元素组成。

5、返回fun的函数

Fruit = [apple,pear,orange].

MakeTest = fun(L)->(fun(X) -> lists:member(X,L) end) end.

IsFruit = MakeTest(Fruit).

IsFruit(pear).

其中:

lists:member(X,L)--如果X是列表L的成员,则函数lists:member(X,L)返回true.

6、定义自己的抽象流程控制

Erlang普通版 FOR 循环

fact(N) when N <=0 -> 1;

fact(N) when N > 0 -> N * fact(N-1).

Erlang尾部递归版FOR循环

fact0(N, R) when N <=0 -> R;

fact0(N, R) when N > 0 -> fact0(N-1, N*R).

fact(N) -> facto(N,1).

尾递归版本避免了栈内存消耗, 普通版为N*占用很多内存

 7、列表解析

记号[F(X) || X <- l]代表“由F(X)组成的列表,其中X是取值于列表L”。

[2*X || X <- L). 意味着“列表L中每一个元素X乘以2后的列表”。

8、Case/if表达式

case Expression of

  Pattern1 [when Guard1] -> Expr_seq1;

  Pattern2 [when Guard2] -> Expr_seq2;

  ...

end

求值后,依次对Pattern进行匹配(带Guard).如果没有任何匹配则报错。

if

  Guard1 -> Expr_seq1;

  Guard2 -> Expr_seq2;

  ...

end

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值