1. 简介
l Erlang是一个并行编程语言和运行时系统,最初由爱立信(Ericsson)于1987年为电信行业所开发。1998年爱立信在改良的MPL(Mozilla Public License)许可下将Erlang发布于开源社区。
l Erlang是:
a) 一种“小众”语言。
b) 一种函数式语言 (变量只能赋值一次)。
c) 一种动态类型语言(变量类型在运行时决定,代码需要编译后才能执行,与Python,Ruby等不一样)。
d) 一种强类型语言。
e) 一种面向并发(Concurrency Oriented)的语言。
2. 特性
l 并发性 - Erlang支持超大量级的并发线程,并且不需要操作系统具有并发机制。
l 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)。
l 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
l 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。
l 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
l 递增式代码装载-用户能够控制代码如何被装载的细节。
l 外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
3. 数据类型
3.1. 变量
3.1.1. 在erlang中的变量只能被赋值一次,变量第一个字母要是大写的。
3.1.2. 符号”=”是值类型匹配操作(带有赋值的意思)。(pattern matching)
3.1.3. 在erlang中变量是不可变的,也没有共享内存的概念,也没有锁。
3.2. 浮点数
3.2.1. 整数除法示例: 4 div 2。
3.2.2. 求余示例: 5 rem 2。
3.2.3. “/”永远返回浮点数。
3.3. Atoms(原子)
3.3.1. Atoms表示不同的非数字常量值。
3.3.2. 示例: Xss = 'Asss'。
3.4. 元组
3.4.1. 将若干个以逗号分隔的值用一对大括号括起来就形成了一个元组。
3.4.2. 元组示例: Person = {person, {name, joe}, {height, 1.83}, {footsize, 42}}.
3.4.3. 从元组中提取数据:
Point = {point, 10, 45}.
{point, X, Y} = Point.( pattern match)
此后X=10, Y=45.
3.5. 列表
3.5.1. 将若干个以逗号分隔的值用一对方括号括起来,就形成了一个列表。
3.5.2. 示例: ThingsToBuy = [{apple, 10}, {pear, 6}, {milk, 3}].
3.5.3. 列表中的第一个元素叫做列表头,剩下的部分叫做列表尾。一般来说列表头可以是任何东西,列表尾经常是一个列表。
3.5.4. 访问列表头元素是一个非常高效的操作。
3.5.5. 从列表中解析元素:
ThingsToBuy1 = [{oranges, 4}, {newspaper, 1}|ThingsToBuy].
[Buy1|ThingsToBuy2] = ThingsToBuy1.
此后:ThingsToBuy1 = [{oranges,4},{newspaper,1},{apple,10},{pear,6},{milk,3}].
Buy1 = {oranges,4}.
ThingsToBuy2 = [{newspaper,1},{apple,10},{pear,6},{milk,3}].
3.6. 字符串
3.6.1. 在erlang中没有字符串,字符串仅仅是整数列表。用双引号将一串字符括起来就是一个字符串。
3.6.2. 示例:
Name = "Hello".
5>I = $s.
115
8> [I-32, $u, $r, $p, $r, $i, $s, $e].
"Surprise"