关闭

《Programming Erlang》学习笔记1——数据类型

345人阅读 评论(0) 收藏 举报

原子(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] = [...]来提取列表中的数据,其中变量12...会被绑定为列表中对应位置的数据,而“|后面的变量x会被绑定为列表中剩余元素组成的列表。如果前面的变量数等于列表中的数据数目,则变量x为空表[],此时可以省略“|和变量x,其它情况下不能省。

 

字符串(Strings):实际上在Erlang中并没有真正意义上的字符串类型,字符串实质上是一个整数的列表。字符串只能使用双引号“""进行定义。另外,因为字符串实质上是列表,所以也可通过列表的方式定义,只要列表中的所有数据全是可打印字符的ASCII码或其它类型的编码(例如汉字编码),那么Erlang Shell在输出时就能将它作为字符串进行输出。例如[65, 66, 67]在输出时就会变为"ABC"。如果想要知道一个字符的ASCII码则可以使用“$符,例如“$A.输出为65

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1847次
    • 积分:45
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档