erlang学习笔记
1.erlang的安装
ubantu下直接使用 sudo apt-get erlang . 该命令会下载erlang及相关的包。
还有种方式是:
wget http://www.erlang.org/download/otp_src_R14B03.tar.gz
cd otp_src_R14B03
./configure --prefix=/usr/xxx/erlang
make
make install
这种方式可能出现的问题是一些依赖的包需要自己去下载,较麻烦!
测试是否已经安装成功,打开一个终端
输入 erl,若是得到如下信息,代表已经安装成功了。
inter12@inter12-desktop:~/fb$ erl
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4 (abort with ^G)
2.基本的加减乘除
1> 1.0 + 1.
2.0
2> 2.5*6.
15.0
3> 4.5/9.
0.5
4> -9-1.
-10
5> 4 div 3
5> .
1
6> 4 / 3.
1.3333333333333333
7>
7>
7> 5 rem 3.
2
特别注意:
1.在shell环境下,代表一个命令行的结束是用英文字符下.号
2.可以随意使用浮点行型及integer类型,除法中使用 / 则会得到一个 浮点型的结果,若是需要integer之间的相除,需要使用 4 div 3 -- > 1
3.求余的符号是 rem . 5 rem 3 -- >2
4.可以进行-(负号)的运行
3.变量的赋值
8> _ = 3+3.
6
9> Two = 2.
2
10> two = 3.
** exception error: no match of right hand side value 3
11> Two = 3.
** exception error: no match of right hand side value 3
1.变量名若是英文字符,首字符必须大写,Two=1 -- ok ,two=1 -- fail
2.也可以使用_(下划线)开头定义变量名
3.变量名被赋值后,不允许被再次定义,也就是说在erlang中,每个变量都是常量!再次进行赋值会报错!
4.在shell环境中,如是对于一个变量赋值错误后,可以通过两个函数来清除
f(变量名) -- 清除对该变量的赋值
f(). -- 清除所有变量的赋值
以下就是代码展示:
21> Two = 2.
2
22> Two = 3.
** exception error: no match of right hand side value 3 ------不允许再次赋值
23> f(Two). ------清理变量
ok
24> Two = 3. ------允许再次赋值
3
25> Two = 3.
3
26> Two = 4.
** exception error: no match of right hand side value 4
27> f().
ok
28> Two = 4.
4
4.atoms
1.所有定义为小写的变量 都是原子的,不能被改变,不能被使用.可能是暂时未常量来描述吧!(现在可能理解还存在问题,以后待考)
2.单引号使用的变量等同于不使用单引号的变量 atom = 'atom' -- > atom
32> cat.
cat
33> cat = 1.
** exception error: no match of right hand side value 1
34> Atom is cheated. //若是不带单引号的话 则是变量赋值 ,报错
* 1: syntax error before: is
34> 'Atom is cheated'
34> .
'Atom is cheated'
5.boolean 类型及比较运算符号
38> true and false.
false
39> true or false.
true
40> true xor false.
true
41> not false .
true
42> not (true and true).
false
注意点:
1.and 和 or 都会计算两边的值 ,若是你期望只做一个短路运算的话 ,那么就需要用到 andalso 好 orelse .这个就是类似于 java的 && || 运算符!
50> true andalso kk. //这里有一个很有趣得问题,为什么会得到kk。 很奇怪。还留待考究
kk
51> false orelse true.
true
比较运算符:
56> 5 == 5.0.
true
57> 5 =:= 5.
true
58> 1=/=0.
true
59> 1=:=0.
false
60> 5=:=5.0.
false
61> 5==5.0.
true
62> 1/=3.
true
解析:
1.=:= 等同于其他语言中的 == 。 =/=和/= 等同于其他语言中的 != 这个地方还有疑问!
2.从上面的解析看, =:=比较的类似于java中的内存地址比较 == 比较的是两个地址的值是否相同!
3.其他的还有就是 >= =<
66> 1 >= 1.
true
67> 1 =< 1.
true
68> 1 > 3.
false
69> 1 < 3.
true
对于不同类型之间==比较 同意返回false 。
77> 5 =:= false.
false
78> 5 ==false.
false
但是< 和 >之间的比较 就不同了。先看下面的结果
79> 1 == false.
false
80> 1 < false.
true
在erlang中没有 true和false的布尔类型变量。 这里的 true 和 false 都是 atom.原子单一的变量(可能描述的不准确)。
在erlang中不同类型之间的比较关系如下所示:
number < atom < reference < fun < port < pid < tuple < list < bit string
也就是说用数字类型同其他类型比较的话,都是出于小的一方如下就很明白的说明了这个问题。同时在erlang中所有类型都是可以用来比较的。
80> 1 < false.
true