原子(Atom):原子以小写字母开头,可以包含数字、字母以及下划线和“@”符号,但不能以下划线开头(如果以下划线开头则作为变量)。原子仅仅是一个名字而已,没有其它意义,不像变量那样包含一个值,它类似于C中的枚举值。原子还可以使用单引号“'”来进行定义,在这种定义方式中,原子可以包含任意字符,并且可以以大写字母或下划线开头。原子可以作为函数的一个参数,以进行同名函数不同子句的定义。因此在调用时需要输入原子作为一个参数。
整数:Erlang中可以表示任意大小的整数,并且运算也是精确的,因此既不用担心运算溢出,也不用担心字长和变量所能表示的整数大小等等。
浮点数:在整数后加一个小数点和至少一位小数位的数称为浮点数。在使用“/”进行除法运算时,无论是否整除,其结果会自动转换为浮点数,而如果想进行整数除法和取余,则需要使用“div”和“rem”操作符。
元组(Tuple):包含零个或多个数据的单一数据实体,这些数据可以是以上基本类型也可以是其它元组。元组用大括号“{}”括起来并且数据之间以逗号进行分隔。元组类似于C中的“struct”,但是没有结构名和其中各个域的域名。因此当创建了元组一段时间后,我们很可能会忘记这个元组是用来表示什么数据的,这时我们可以使用一个技巧来解决这个问题,那就是使用元组的第一个元素来表示这个元组的用途,即可以使用原子来表示。例如我们表示一个二维的点(3, 5)可以这样写:X = {point, 3, 5}.
提取(extract)元组中的数据:可以使用“{变量1, 变量2, ...} = {......}.”来抽取元组中的数据,其中左边是变量名的元组,右边是想要提取的元组,左右两边的元素个数必须相同,但是左边可以不必全是变量,只要提取需要的元素即可,其它元素只要填写与右边相同的值或下划线“_”即可(别忘了“=”是模式匹配操作符;“_”称为匿名变量,可以同时绑定为不同的值)。一旦操作成功,就可以通过变量使用提取出的值了,而原来的元组不会变化。
列表(List):列表用于存储可变数量的数据。列表使用方括号将以逗号分隔的数据括起来创建。列表中的元素可以是任意类型,包括其它列表。
列表的头(head)和尾(tail):列表的头就是列表的第一个元素,而列表的尾就是除去头外剩余元素所组成的列表。因此可以看到列表的头可以是任意类型的数据,而列表的尾一定是一个列表!所有的表处理函数都是从抽取列表的头进行处理开始的,处理完后接着处理列表的尾,因为尾是一个列表,所以还是从抽取头进行处理开始,依此类推......
列表的定义:除了上述基本定义方式外,列表还有另一种基于已有列表的定义方式:使用“|”操作符定义列表。设X是已定义好的列表,如果我们希望定义一个新列表,并且这个新列表是在X基础上的扩展,那我们不必在定义时将X中的元素重写一遍,而只使用“|”符即可。定义方法:Y = [新元素1, 新元素2, ... | X],“|”前面是新表中特有的元素,可以是任意类型无限多个,而“|”后面是旧表X。这样定义好后,新元素就会和旧表中的元素合在一起形成新的表。这样的表称为恰当的(proper)表,如果“|”后面不是一个列表,而是其它类型的数据,则生成的表称为不恰当的(improper)表。在“|”前,如果一个元素是列表的话,则在新生成的表中它仍是一个列表,而在“|”后面的列表在新生成的表中将会被展开,其中的元素作为新表中的元素。
提取(extract)列表中的数据:可以使用“[变量1, 变量2, ... | 变量x] = [...]”来提取列表中的数据,其中变量1,2,...会被绑定为列表中对应位置的数据,而“|”后面的变量x会被绑定为列表中剩余元素组成的列表。如果前面的变量数等于列表中的数据数目,则变量x为空表[],此时可以省略“|”和变量x,其它情况下不能省。
字符串(Strings):实际上在Erlang中并没有真正意义上的字符串类型,字符串实质上是一个整数的列表。字符串只能使用双引号“""”进行定义。另外,因为字符串实质上是列表,所以也可通过列表的方式定义,只要列表中的所有数据全是可打印字符的ASCII码或其它类型的编码(例如汉字编码),那么Erlang Shell在输出时就能将它作为字符串进行输出。例如[65, 66, 67]在输出时就会变为"ABC"。如果想要知道一个字符的ASCII码则可以使用“$”符,例如“$A.”输出为65。