第二章 入门
2.1 概览
2.1.1 阶段1:茫然无绪
- 安装Erlang
- 启动Erlang Shell
- Erlang Shell的基本使用
- 在文本编辑器中编写Erlang程序
- 在Erlang Shell中编译和运行程序
2.1.2 阶段2:初窥门径
- Erlang Shell的高级功能
- Erlang的各种模块
- Erlang的自动编译和执行
- 运用OTP
- 编写分布式程序
2.1.3 阶段2.5:观其大略, 不求甚解
- 第一次通读不需要每一章都学精之后再继续向下进行, 快速通览全貌再各个击破。
2.1.4 阶段3:运用自如
- 学习Mnesia(Erlang内置的数据库)
- 学习与其它语言的互相调用
- 利用OTP构建监控树和启动脚本
- 运行和优化程序
2.2 Erlang安装
# Fedora
yum install -y erlang
# Mac OS X
brew install erlang
2.3 代码地址
http://pragmaticprogrammer.com/titles/jacrlang/code.html
2.4 启动Shell
使用erl启动Erlang Shell
使用q().退出shell
2.5 整数运算
表达式需要以”.”结尾
2.6 变量
变量以大写字母开头
2.6.1 变量不变
变量只能赋值一次, 此后的赋值操作将执行模式匹配, 遇到与首次赋值内容不同的操作将会提示模式匹配错误, 也就是说Erlang中的变量的值实际是不变的。
2.6.2 模式匹配
‘=’在其它语言中为赋值操作, 但在Erlang中为模式匹配操作
2.6.3 单一赋值
因为变量赋值一次后永不改变, 所以不用担心多个程序同时对可变内容(共享内存)进行修改的问题, 因此更有利于并发程序的编写。
2.7 浮点数
1> 5 div 3.
1
2> 5 rem 3.
2
3> 5 / 3.
1.6666666666666667
2.8 原子
原子用来表示不同的非数字常量值, 是一串以小写字母开头, 后跟数字、字母、下划线或邮件符号的字符, 也可以使用单引号引起来的字符, 原子的值即为其本身。
2.9 元组
元组是一定数量的项组成的单一的实体, 采用逗号分割若干个值括在花括号中的方式。
C语言定义坐标系中的点
struct point
{
int x;
int y;
} P;
P.x = 10; P.y = 45;
Erlang中不用类型声明
P = {10, 45}.
P = {point, 10, 45}.
获取元组中的字段值使用模式匹配的方式
# 注意变量需大写字母开头、单一赋值
1> {point, X, Y} = Point.
{point,10,45}
2> {point, X, Y} = P.
3> X.
10
4> Y.
45
# 使用'_'作为占位符, 只获取需要的变量
5> {point, _, A} = P.
{point,10,45}
6> A.
45
2.10 列表
列表用于存储数量可变的项, 采用逗号分割若干个值括在方括号中的方式, 列表中的元素可以是不同的类型。
列表的第一个元素称为列表的头, 其余称为列表的尾。
列表操作
# 定义列表
1> T = [{apples, 10}, {pears, 6}, {milk, 3}].
[{apples,10},{pears,6},{milk,3}]
# 添加内容
2> TAdd = [{oranges, 4} | T].
[{oranges,4},{apples,10},{pears,6},{milk,3}]
# 提取内容(使用竖线'|'区分头和尾)
3> [Thead | Ttail] = TAdd.
[{oranges,4},{apples,10},{pears,6},{milk,3}]
4> Thead.
{oranges,4}
5> Ttail.
[{apples,10},{pears,6},{milk,3}]
2.11 字符串
字符串是使用双引号括起来的一串字符, 本质是一个整数列表。
1> Name = "Hello".
"Hello"
2> [83, 117, 114, 112, 114, 105, 115, 101].
"Surprise"
3> N = "中文".
[228,184,173,230,150,135]