1、 erlang中,变量不能以小写字符开始的原因,就是erlang中的原子(atom)。原子是常量,唯一的值就是自己的名字,你看到的就是你想得到的--别想得到更多,比如dog,就是dog,你不能操作他,不能改变他,也不能把它分成几部分。小写字母开头的单词只是原子的一种写法,还有其他写法。如下:
38> atom.
atom
39> a.
a
40> 'a'.
a
41> 'a'=a.
a
42> 'Autom'. %大写字母,可以放到‘单引号中
'Autom'
43>
43> atom@erlang.
atom@erlang
44> erlang'atom. %这个是有问题的
44>
注意有些原子是保留字,这些是不能使用的,类似C或java语言的保留字。如:
after ,and ,andalse,band,begin,bnot,bor,bsl,bsr,bxor,case,catch,cond,div,end,fun,if,let,not.of,or.orelse,query,receive,rem,tyr,when.,xor
等
2、 布尔代数和比较操作符
46> true and false. %逻辑与
false
47> false or true. %逻辑或
true
48> true xor false.
true
49> true xor true.
false
50> not false.
true
51> not (true xor false).
false
52>
注意:布尔操作符and 和or对操作符两边的参数都会去求值(这不同于我们常用的语言)。如果想要一个短路操作(只有在必要时,才去求值右边的参数),可以使用andaalso,orelse
52> true andalso true.
true
53> true orelse false.
true
54>
3、相等性测试和不等性测试也很简单,只不过使用的符号和其他语言中稍微有些不同,请注意
在其他语言中,通常使用 == 和 != 来做相等性和不等性比较,
但在Erlang中,使用的是 =:= 和 =/= 来做比较
在做算术计算时,Erlang并不区分浮点和整数,但是在做比较时,却会区分。
如果你不想区分,可以使用== 和 /= 操作符 因此,关键在于是否需要精确的相等性比较。
568> 6=6.
6
69> 6=9. %原子赋值
** exception error: no match of right hand side value 9
70> 5=:=5. %精确比较
true
71> 5=:=5.0.
false
72> 5==5. %数值比较
true
79> 5==5.0.
true
73> 5=/=4. %精确比较
true
74> 5=/=5.
false
75> 5=/=5.0.
true
76> 5/==5.0.
* 1: syntax error before: '='
76> 5/=5.0.
false
77> 5/=5.
false
78>
4、比较操作
80>
80> 1<2.
true
81> 1<1.
false
82> 1>=1.
true
83> 1<=1. %为什么报错呢,因为 这个小于等于不同于其他的语言哟
* 1: syntax error before: '<='
83> 1 <=1.
* 1: syntax error before: '<='
83> 1 <= 1.
* 1: syntax error before: '<='
83> 1 =< 1. %正确的写法,不同于其他语言,小于等于 =<
true
84> 1 =< 2.
true
5、其他补充
输入4+qin会怎么样呢?最好的办法,就是以身试法了。
85> 4+qin.
** exception error: an error occurred when evaluating an arithmetic expression
in operator +/2
called as 4 + qin
然后被结果吓一大跳,看来,Erlang确实不喜欢把他的基本类型用错,仿真器返回一个错误消息,表明它不喜欢出现在+两别的参数。
不过,对于用错类弄,Erlang也并不总是会生气:
94> 0==false.
false
95> 0/=false.
true
96> 0==true.
false
97> 1==true.
false
98> 1 true 99> 1>false. false 100> 这是怎么了? 尽管Erlang不允许把两个不同类型的操作数加在一起,但却允许他们进行比较。这是因为Erlang的语言发明者 把实现性的优先级排在了前面,觉得如果能简单的写出通用排序算法那样的程序,可以对任何数据排序,岂不是更棒。 以其他语言的了解,是不是还有点蒙圈呢,94行,false应该是0,0==0应该返回true吧。在我们了解的语言中,0代表false,非0代表true; 但注意在Erlang中不是这样的,因为 Erlang中,根本没有true和false,他们都是原子数据类型。 注意在比较 注意在比较中,数据类型之间的大小顺序是:number< atom 引用Erlang语言的发明者 Joe Armstrong的一句话:“具体的顺序并不重要---重要的的定义明确的全局顺序。” 今年是大年初一,准备好好学习一下Erlang的相关知识。如果上面的内容对您有帮助,欢迎打赏一下,下面是我的二维码,请微信扫一扫,因为做IT的大多都是diao si ,多少不限,有心鼓励即可,谢谢!