《Learn You Some Erlang for Great Good!》的学习笔记(二)

       和学习其它语言类似,目前我们还没有到直接编程的地步,首先从简单的熟悉Erlang Shell开始,枯燥的介绍就不多说了,在linux/mac环境下,直接输入erl既可进入erlang shell。但这里有个小技巧值得介绍一下,在shell中输入li,接着按下TAB键,他就会自动补全成lists:,紧接着如果再次按下TAB键,就会将lists模块下的所有函数全部打印出来。对于shell的常用命令,可以输入help().(erlang中,命令以“.”结束,多个命令可以用“,”分隔,但只有遇到“.”才会输出结果)进行查看。

       shell的退出也有多种方式,最简单直接的就是q(),但是如果shell卡死的话,这种方式就不适用了;如果你注意进入shell时的提示信息,你也很容易发现另一种退出方式,没错“aborting with ^G.” ,紧接着在输入h,你就会得到以下的提示:


        是不是发现了很多job相关的命令?!erlang shell不同于其它语言的shell,它可以由许多shell实例组成,每一个将运行不同的任务。你可以像操作系统的进程一样管理它们。相信大家看一下下面的操作就会明白意思了(* 代表最近一次操作的shell,如果输入命令不接参数,将默认操作带*号的shell)。


接下来就要到数据类型的介绍了,虽然枯燥,但还是无法逃避啊。

1.数值

       对于erlang中的数值,不多说了,直接上图(有意思的一点是,erlang中貌似没有什么数值位数限制,有兴趣的可以做一个大数值的乘法试一试):


2.不可变的变量

       对于变量的不可变,之前已经介绍过,erlang中变量的首字母必须大写(否则将会被认为是原子)。说到变量,当然离不开"=",在java中,这个算是赋值运算符,而在erlang中,"="被称为模式匹配,至于什么区别,可以先简单感受一下:


       首先第一句到第四句不多说,变量必须初始化一个值,而赋值符号就是=。第五句就跟之前说的看似有点出入了,之前说过变量只可以被赋值一次,所以这边的意思不是Two重新被赋值为2,而是“比较”的意思,这也是“=”的第二层意思,与java中“==”不同的是,如果相等,则返回这个值,如果不等,则会直接抛出异常。而“=”的用处也不止于此,之后会更详细的介绍。

3.原子

       原子实际上可以看作就是字母常量,原文中说的好:“what you see is what you get--don't expect more.”以小写字母开头的单词就是原子,原子可以由字母数字@和_组成,也可以在单引号''内,如'Atoms can be cheated!'.这时就可以包含任意字符。

      其实原子也有一定的副作用,原子是存储在原子表中的,每个原子用4(32位系统)或8(64位系统)字节表示,而且原子表不会被回收,所以原子不应该被动态创建。

4.逻辑与比较运算。

       逻辑运算符比较简单,包括and、or、xor、not、andalso、orelse,其中andalso和orelse有短路特性。

       比较运算也不多说了,=:=, =/=,==, /=, > , >=, <, =<,对于其中的区别,只需要看下面这张图就清楚了。(注意=<,为什么不是<=呢,因为这个比较像左箭头,容易混淆)


5.元组

       实际上就是任意类型的集合,形式为:{Element1, Element2, ..., ElementN} ,学到元组,你就可以体验到"="模式匹配的神奇了,"="会将左右的元组进行匹配,同时会将对应的变量进行赋值。你还可以使用"_"进行元组项的忽略,需要注意的是,它只能一一对应。

       元组经常被用来定义一个数值,比如北京目前的温度是-8.2摄氏度,可以表示为{beijing, -8.2},或者北京的坐标{beijing, {32.41321,129.31212}}等。总之,通常使元组中的第一个值为原子,明确表示后面值的意义。

6.列表

        这种数据类型就不多费唇舌了,内部元素可以是任意类型的,列表的组合可以使用++和--,而且这些操作都是从右到左计算的。

        

列表可以分为头和尾,其中头代表列表的第一个元素,尾代表除头之外剩下元素所组成的列表,头和尾之间可以用"|"连接进行模式匹配或组合,如下所示。

         注意|右边的必须是列表,比如[1 | 2]并不表示[1, 2],虽然并不会报错,但是,这个一个非法的列表,当使用任意函数(如length)进行操作的时候都会报错,而[1|2]这种只有在模式匹配时会起作用,如下所示:

 

7.列表表达式。

       列表表达式是用来构建和修改列表的。类似于数学中的集合注解,{x ∈ : x = x 2 } ,是不是很眼熟?而列表表达式的基本类型如下所示:

NewList= [Expression || GeneratorExp1, GeneratorExp2, ..., GeneratorExpN, Condition1,Condition2, ... ConditionM]

看一个简单的例子,顾客去餐馆点餐,对服务员说,把3-10元之间的菜都来一份,然后每一道菜会多给百分之7的小费,最后的消费单据就出来啦,so easy。


基本数据类型就介绍到这儿啦,之后将介绍如何处理二进制数据。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值