数据类型

Erlang的数据类型与其它语言,如C、 PHP,有很多不同之处。

整型

Erlang可以处理任意大小的整型,其大小仅受限于内存大小。代价是处理比固定大小的整形处理慢一点。

不同进制表示方式为Base#Value,Base为进制,如:

10进制:

-100 
0 
100

2进制:

2#1011

16进制:

16#E1

4进制:

4#11

浮点

123.45
1.234E10
1.234E-10

Atom

Atom,不知道翻译成原子类型还是什么好:

Atoms start with a lowercase letter or are delimited by single quotes. Letters, digits, the “at” symbol(@), the full stop(.), and underscore(_) are valid characters if the atom starts with a lowercase letter. Any character code is allowed within an atom if the atom is encapsulated by single quotes.

但是full stop(.)好像并不能出现在最后一个字符,至少在erlang shell中不能这样:

abc..

对于Atom类型的操作仅有比较.

布尔类型

布尔值由atoms true或false表示。

Tuple

Tuple是组合类型,元素由{}组织在一起, 如:

{abc,[1,2,3],true,123,{4,5}}

列表(List)

列表与tuple有点相似,由[]组织元素,如:

[1, 2, {3, 4}, [5, 6], abc].

字符与字符串

字符由整型表示,而字符串则用列表表示。

字符前面需要加入$符号。

$A.

“Hello, world”表示为:

[72, 101,108, 108, 111, 32, 87, 111, 114, 108, 100].

变量

变量以大写字母或下划线开头,并之后仅能使用字母、整型、下划线组成。变量在使用产不需要声明。

Erlang中给变量赋值叫做绑定(bound)值,并且一旦绑定之后不可以改变。

Erlang中也没有传值,不能传递变量的引用,如C的指针。

模式匹配

模式匹配(Pattern matching)用于:

  • 给变量赋值
  • 控制程序流执行
  • 从组合数据类型中提取数据

下划线只起占位作用,并不保存值, 下划线开头的变量叫做”don’t care”变量, 即使该变量在程序中没有被用到,但编译器也不报错。

{person, Name, _, _email} = {person, "James", 100010, "[email protected]"}.

函数与模块

函数在模块中定义, 函数名为atom,如数的数量叫做arity。 “->”将函数头部与函数主体分开。

模块的文件后缀为.erl.

% Demo module of Erlang
-module(demo).
-export([double/1, multi/2, area/1]).

double(Value) ->
    times(Value, 2).

multi(Value, Value2) ->
    Value * Value2.

times(X, Y) ->
    X * Y.

area({square, Side}) -> 
    Side * Side;

area({triangle, A, B, C}) ->
    S = (A + B + C)/2,
    math:sqrt(S*(S-A)*(S-B)*(S-C)).

Notes of Programming Erlang, by Francesco Cesarini & Simon Thompson.