`

erlang语言基础知识(原子,布尔代数,比较运算符)

 
阅读更多

  

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<false.

true

99> 1>false.

false

100> 

 

这是怎么了?

  尽管Erlang不允许把两个不同类型的操作数加在一起,但却允许他们进行比较。这是因为Erlang的语言发明者 把实现性的优先级排在了前面,觉得如果能简单的写出通用排序算法那样的程序,可以对任何数据排序,岂不是更棒。

  以其他语言的了解,是不是还有点蒙圈呢,94行,false应该是0,0==0应该返回true吧。在我们了解的语言中,0代表false,非0代表true; 但注意在Erlang中不是这样的,因为  Erlang中,根本没有true和false,他们都是原子数据类型。

    注意在比较

 注意在比较中,数据类型之间的大小顺序是:number< atom <reference<fun<port,pid<tuple<list<bit string

 

引用Erlang语言的发明者 Joe Armstrong的一句话:“具体的顺序并不重要---重要的的定义明确的全局顺序。”

 

 

今年是大年初一,准备好好学习一下Erlang的相关知识。如果上面的内容对您有帮助,欢迎打赏一下,下面是我的二维码,请微信扫一扫,因为做IT的大多都是diao si ,多少不限,有心鼓励即可,谢谢!

 

 

 

 

  • 大小: 137.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics