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

原文地址:https://www.cnblogs.com/freebird92/p/2290195.html