备注:Erlang-- 学习笔计,知识要点来自于
维基百科,一些不容易懂的地方,我给出重新解释,方便自己理解和记忆,如果有错误,请大家不吝指教。
- 原子: 原子是基本数据单元,以一般文字构成。构词规则有:
- 以小写英文字符开头、不包含空白的连续文字。
- 以单引号包含的任意连续文字。
hello 'Hello, World!' true a3b
- 以小写英文字符开头、不包含空白的连续文字。
- 数字: 数字是基本数据单元,可以是整数或实数
- 连续数字符号
- 包含一个小数点的连续数字符号,并不以小数点开头也不以小数点结尾
- 符合前二项原则,并以 + 或 - 符号开头
- 以#分区的数字,前者将表示进制
302 3.1416 +1 -2 16#10
- 连续数字符号
- 列表: 列表是与链接串行相同的数据结构。任一列表大致区分为头部与尾部,头部是列表的第一项,尾部是列表除第一项之外的其他部 份
- 左边以 [ 、右边以 ] 符号,包含一串以逗号分隔的零或多项构句要素。
- 符合前项原则,当存在任一 | 符号时, | 的左边有一串逗号分隔的构句要素, | 的右边只有一个构句要素。
[] [1,2,3] [ [1],2|[] ]
- 左边以 [ 、右边以 ] 符号,包含一串以逗号分隔的零或多项构句要素。
- 值组: 值组是将二个、三个或多个数据放在一起的数据结构
- 左边以 { 、右边以 } 符号,包含一串以逗号分隔的零或多项构句要素。
{} {{1},2}
- 左边以 { 、右边以 } 符号,包含一串以逗号分隔的零或多项构句要素。
- 字符: Erlang将字符存为32位的整数
- 任何可见的字符,以 $ 开头、后接该字符符号,即表示字符本身
- 任何不可见的字符,可使用以 $ 开头、后接该字符符号的逸出串行表达
$3 $) $\012 $\x0A $\n
- 任何可见的字符,以 $ 开头、后接该字符符号,即表示字符本身
- 字符串: Erlang将字符串视同一列整数列表
- 以双引号包含任意多个文字,即为字符串。
- 以一列整数列表表达,使其中每个整数项目都落在合理的字符的值范围,此列也是字符串。
"Hello, World!" [65,66,67]
- 以双引号包含任意多个文字,即为字符串。
- 二进制数据:以左边 << 、右边 >> 符号,包含由比特语法表示的数据
<<"Hello, World!">> <<65:8,66:8,67:8>>
- 函数识别项: Erlang容许用文字表示函数识别项,使程序中可以对指定函数做函数调用,或者当做数据传递。
- 函数识别项格式为 fun 函数名称/参数数目
fun a_function/3
- 函数识别项格式为 fun 函数名称/参数数目
- 程序代号: Erlang容许以自带函数erlang:spawn/3、erlang:spawn/4、erlang:spawn/1、erlang:spawn/2等等,将指定函数启动为一个程序。程序启动之后,Erlang以左边 < 、右边 > ,包含一个数字和点号组成的编号,表示此程序代号
> [P|_] = example:ring_proc([func,func,func]). [<0.233.0>,<0.234.0>,<0.232.0>] > P ! stop. Stop process <0.233.0> stop Stop process <0.234.0> > Stop process <0.232.0> >
- 模块:
- Erlang容许将一些程序整理为一个模块。模块的设置,是在源码文件开头书写模块标记,格式为
-module(模組名稱). -export( [ 函數名稱/參數數目 , 函數名稱/參數數目 , ... ] ). -import( 模組名稱, [ 函數名稱/參數數目 , 函數名稱/參數數目 , ... ] ).
- 模块名称和函数名称都是原子。 -module(模块名称) 定义模块的名字,要与文件名相同。 -export( ... ) 定义模块发布的函数,模块内的任何函数必须要发布才能让外部通过模块调用该函数。 -import( ... ) 定义本模块要从其他模块导入哪些函数,以便本模块自己使用。另外,为了方便程序的撰写并测试,还容许 -compile(export_all) 定义本模块的所有函数全部对外发布。
-compile(export_all).
- Erlang容许将一些程序整理为一个模块。模块的设置,是在源码文件开头书写模块标记,格式为
- 宏: 宏是将一项数据以另一个文字做为代名
- 定义宏的语法是
-define ( 代名 , 資料 ).
- 使用宏的语法是
? 代名
- Erlang有一些内定语法,例如模块名称为
?MODULE
- 定义宏的语法是