Erlang那些事-基本数据类型

来源:互联网 发布:mac qq远程控制 编辑:程序博客网 时间:2024/05/17 07:25

古人云,不积跬步,无以至千里;万丈高楼平地起,没有坚固的地基,再高也危险啊,今天就来看看Erlang的那些基本的数据类型,为以后的高楼大厦打好地基。


学过编程的屌丝们都知道,数据类型都差不多,基本上就是什么整型、浮点型、字符、数组等等,嗯,没错,但是也不全对,毕竟我们要知道Erlang跟他们不是一路人当然会有些许区别,现在就来看看有什么相似之处,又有什么不同点,


(1)整型,这个跟C中的整型是个差不多的概念,但是有几点还是不一样的,对于Erlang中的整型数没有最大值的概念,只要你的内存足够大,那么他的最大值就足够大,即最大值只受限于当前机器的可用内存。怎么着,你不信?现在就打开Erlang Shell试试呗

2> 32#123456789  * 36#987654321.30499481888415538067781185

补一句,32#1234,就是说1234是按32进制表示的数字,Base#Value,是指Value是Base进制的数字。


说到整数,就顺便说一下整数的各种运算符吧,


(2)浮点数,嗯,这个也差不多,不同的是C语言中有float和double的区别,而Erlang中没有,就这一个Float实数类型。

3> 2.5 * 4.0.10.04> 6 div 3.25> 7 rem 2.1

(3)基元,这个类型C语言中没有,Erlang用基元Atom来代表文字常量,类似于C语言中的枚举类型吧,这个类型由小写字母开始,其他的可用字符包括数字,字母,@,和句点(.)以及下划线等,另外由单引号界定的也是基元。嗯,说得好,跟C语言中变量的命名有类似之处,但是Erlang中的变量必须要以大写字母开始,所以千万不要在Erlang中把基元和变量搞混了。

6> Hello.* 1: variable 'Hello' is unbound7> hello, world.world8> hello.hello

看上面的例子,第一个6>,提示Hello是一个变量,因为是以H开头,大写字母开头的都是变量,故提示变量Hello没有绑定,即没有赋值。

第二个7>其中以hello开头,但是只返回了world,这个地方类似于C语言中的逗号表达式,只返回最后一个表达式的值,

最后一个是正规的例子,基元返回它的值本身。


(4)布尔, 其实这个东西很纠结,因为Erlang并没有布尔类型,但是上面的基元中true和false可以用来测试布尔的返回值。

10> 1 == 2.false11> 1 == 1.true12> false == false.true13> false == true.false14> false /= true.true


(5) 元组,这是个新东东,C语言中没有这个东西,元组用来保存一组数据元素的复合数据类型,使用封闭的花括号{.......}来定义,其中的元素由逗号隔开,然后其中的各个元素的数据类型可以不同。如果元祖的第一个元素是基元,那么通常称它为标记(Tag),这是一个convention惯例。另外需要注意的一点是,在C语言的数组中,元素的索引是从0开始的,而元祖不同,他的索引值是从1开始的,这个要搞清楚。

15> Time = {time, 21, 30}.{time,21,30}16> {time, minute, second} = Time.** exception error: no match of right hand side value {time,21,30}17> {time, Minute, Second} = Time.{time,21,30}18> Minute.2119> Second.30

其中第16>中minute和second是基元,故无法进行匹配,通过模式匹配进行赋值。这里提一下,“=”和C语言中赋值并不一样,在C语言中是赋值,但是在Erlang就是匹配。如果一个变量未绑定,称之为自由变量,则匹配之后相当于给其赋值了,就成为了绑定变量。对于绑定变量就没有赋值这个概念了,就是进行匹配操作了。还有一点要主要在Erlang中变量只能进行单次赋值,即只能赋值一次,如果理解了“=”是匹配,这个概念也不难理解。


(6) 列表,列表这个类型在C语言中也不存在,但是他的表示方式和C语言中的数组有相似之处,都是用中括号[......]来定义,其中的元素用逗号进行分隔,跟元祖一样都是用来存储元素的集合,列表这个类型在Erlang中非常重要,有一个lists模块都是跟列表相关的各种操作,另外跟高阶函数Fun也有很重要的联系,因此列表一定不可小觑,必须要引起重视。关于列表,不得不提一下Erlang中的字符和字符串,字符由整数来表示,可以通过在字母的前面加$符号来得到,字符串则用整数列表来表示,即字符串是由ASCII值组成的整数列表。

20> [123, ture, time, date, {how, are, you}].   [123,ture,time,date,{how,are,you}]21> [65, 66, 67]."ABC"22> [97]."a"
23> lists:sort([3, 5, 2, 9, 6]).[2,3,5,6,9]24> lists:mamap/2       mapfoldl/3  mapfoldr/3  max/1       24> lists:max([3, 5, 2, 9, 6]).9

在上面第一个24>输入了lists:ma之后按<Tab>键,会显示出当前lists模块下,以ma开头的函数,跟Linux中Shell的操作差不多,很好理解~


上面这些都是基本的数据类型,记录等稍微高级的数据类型以后再说吧~



原创粉丝点击