Progamming Erlang 笔记 - 第 3 章 基本概念

版权声明:@潘广宇博客, https://blog.csdn.net/panguangyuu/article/details/89073478

第3章 基本概念

3.1 启动与停止 Erlang shell

  • erl : 启动 erlang shell
  • Ctrl + C , a (abort) : 立即停止系统,可能导致某些数据破坏
  • q() : 受控关闭,所有打开文件被刷入缓存并关闭,功能与 init:stop() 一致
  • erlang:halt() : 立即停止系统

3.1.2 可能出错的地方

不能在shell里输入附注(连字符开头的事物,如 -module -export)

3.2 简单的整数运算

 Erlang 可用任意长度的整数执行整数运算,在erlang中整数运算是精确的,无需担心运算溢出等。

3.3.1 Erlang 变量不会变

① Erlang 的变量是一次性赋值变量,只能赋值一次。

② 已经指派一个值的变量称为绑定变量,否则称为未绑定变量。

③ X=... 变量作用域是定义时所处的语汇单元,如字句与字句(;相隔)无法共享X变量。

3.3.2 变量绑定与模式匹配

X = (2 + 4).
> 6
X = 6.
> 6                   % 这里不会报错,X原来等于6所以匹配6,匹配成功,而非二次赋值

% erlang 中没有可变状态与共享内存,也没有锁。程序并行变得简单

3.4 浮点数

① 两个整数相除,结果会转换成浮点数,如  5 / 3 = 1.666...7

② N div M :让 N 除以 M 然后舍去余数,5 div 3 = 1

③ N rem M : N 除以 M 剩下的余数,5 rem 3 = 2

3.5 原子

① 在 Erlang 中,原子被用于表示常量值

② 在 Erlang 中,原子是全局性的,不需要宏定义或包含文件

③ 原子以小写字母开头,后接一串字母,数字,下划线或@

④ 原子可放在单引号内,可创建以大写字母或其他字符的原子,如 'Monday','a' 与 a 等价。

⑤ 单引号与双引号不可互用,双引号只用于给字符串字面量定界。

3.6 元组

① 元组 tuple :固定数量的成员组成的单一实体,用逗号分隔花括号表示,如 {joe, 123}

3.6.1 创建元组

① 元组会声明时自动创建,不再使用时自动销毁,Erlang 使用一个垃圾收集器来回收所有未使用的内存

② 创建时,不能用未定义的变量,如 {Q, 123} 而 Q 未定义和绑定,则报错

3.6.2 提取元组的值

Point = {point, 10, 45}.

{point, X, Y} = Point.            % 则X绑定10,Y绑定45


L = {joe, 123}.

{_, X} = L.                       % X绑定123,'_'匿名变量,作为占位符,表示不需使用的一些变量

3.7 列表

① 列表 List : 存放任意数量的事物,各元素可以是任意类型,如:[1+7, hello, {cost, apple}, 3]

3.7.1 专用术语

① 列表的第1个元素称为列表头,剩下的元素称为列表尾。如 [1, 2, 3, 4],列表头:1 ,列表尾:[2, 3, 4]。(注意:列表头是一个整数,列表尾是一个列表)

3.7.2 定义列表

① 如果 T 是一个列表,则 [H|T] 也是一个列表,头是H,尾是T。竖线 | 把列表头与尾隔开,[ ] 是一个空列表。

② 当使用 [... | T] 构建列表时,应确保 T 是一个列表。

③ 可给列表头增加不止一个元素,如 [{orange, 4},{apple, 5} | T]

3.7.3 提取列表元素

通过模式匹配操作。如果有一个非空列表L,则 [ X | Y ]  = L,会提取表头作为X,列表尾作为Y

3.8 字符串

① 严格说,Erlang 没有字符串,是通过整数列表或二进制型表示字符串。

② 可用字符串字面量创建一个列表,Name = "Hello","Hello" 是一个列表简写,包含了代表字符串里各个字符的Unicode码

③ [97, 98, 99] 返回 "abc",[0, 97, 98, 99] 返回 [0, 97, 98, 99] ,因为0是非打印字符,则其他的一同不打印。

④ $a 表示取a的Unicode(ASCII)码

⑤ X = "ab\x{221e}". 会返回[97, 98, 8734] 。因为 8734 不是可打印的 Latin1 字符编码,所以ab自然没有打印出来。

3.9 模式匹配再探

① [ H | T ] = "cat",则 H = 99, T = "at"

② f(),可以让shell忘记现有的所有绑定,所有变量恢复到未绑定状态。

猜你喜欢

转载自blog.csdn.net/panguangyuu/article/details/89073478