erlang 变量存储在哪里_Erlang(3):数据类型与变量

1.初步尝试控制台的操作。输入

1> a = 20结果没反应。。。

后来发现erlang的语句是以.号来结尾的。改改:

1> a = 20.

** exception error: no match of right hand side value 20报错了,与右边的值不匹配。在研究一下。

erlang变量必须以大写字母或者下划线开头。

例如:

2> A = 20.

20=是模式匹配符,变量只能一次性赋值。

这个情况下,有点像C++里面的常量。而=就像C++里面的==了。

22> A = 20. %首次匹配,将A绑定为20

20

23> A = 20. %再次将A匹配20,是相等的,输出了表达式的值20.

20

24> X = 1234. %首次匹配,将B绑定为1234.

1234

25> X = 1235. %再次匹配,匹配不上,就报错了。

** exception error: no match of right hand side value 1235

2.注释,%末尾后面的都是注释

3.几个shell编辑命令

ctrl + a 将光标移动到行首

ctrl + d 删除光标当前字符,在行尾等待输入的时候,是无法删除字符的

ctrl + e 将光标移动到行尾

ctrl + f或右箭头 将光标向前一个字符

ctrl + b或左箭头 将光标向后一个字符

ctrl + p或上箭头 切换到上一条shell语句

ctrl + n或下箭头 切换到下一条shell语句

ctrl + t 调换光标附近的两个字符

Tab 尝试扩展当前模块或函数名称。这些都是亲自测试过的了。

4.算数表达式

8> 1 + 2 * 3 + 4.

11遵循算数表达式的一般规则。

10> 123456789 * 123456789 * 999999999.

15241578734948942249809479Erlang可以使用任意长度的整数,不用担心溢出。

5.8进制和16进制

18> 8#1234567.

342391

19> 16#123abc.

1194684在使用数字的时候,在前面加上8#和16#

试了一下11#、123#这些也是行的。看来理论上是支持任意进制的运算。

6.浮点数

两个整数相除,得出的是浮点数。

34> 4/2.

2.0要想得到C++里面的整除和求余的效果。

31> 5 div 3.

1

32> 5 rem 3.

2div是整除,rem是求余。

%已经被用来做注释了。

erlang的浮点数,也会存在精度问题。

7.原子

有点像C++的字符串常量。

原子必须以小写字母开头,或者用单引号包着。

原子的值就是它本身

35> hello world.

* 1: syntax error before: world

35> hello.

hello

36> 'hello world'.

'hello world'不用''包着的情况下,是不能用空格的。

8.元组

把一些数量固定的项目组合成单一的实体,叫做元组(tuple)。

例如:{fable, 171}

有点想C++的结构。但是元组是匿名的。所以我觉得,更加像C++11出现的初始化列表。

为了增加可读性,一般将一个具有注释性意义的原子作为元组的第一个元素。

例如点{123,456}

改为{point,123,456}

元组是可以嵌套的。

9.提取元组的值

这里需要用到=,真正意义上的模式匹配

例如:

1> Point = {point, 10, 45}.

{point,10,45}

2> {point, X, Y} = Point.

{point,10,45}

3> X.

10

4> Y.

45注意的是,如果X和Y上面之前已经用过了,就会匹配不上的。

只有首次匹配,才能抽取元组中的值。

可以使用_来作为占位符,表示不感兴趣的变量,成为匿名变量,同一个模式里面可以有多个。

例如上面只抽取X:{_, X, _} = Point.

10.列表(list)用来存放任意数量的事物,使用[]。

列表的第一个元素为表头(head),剩下的成为表尾(tail)。

如果T是一个列表,[H|T]也是一个列表,它的头是H,尾是T。竖线(|)把列表的头与尾分开。[]是一个空列表。

如果有一个非空列表L,通过[X|Y] = L会提取列表头作为X,列表尾作为Y。

11.字符串

严格来说Erlang里没有字符串。字符串实际是是一个整数列表。每个字符对于列表里一个Unicode代码点(codepoint)。

可以使用字符串字面量来创建一个列表。字符串字面量(string literal)用双引号包着。

5> H = "Hello World, Fable.".

"Hello World, Fable."如果打印列表的时候,列表内所有整数都代表可打印字符,就会自动打印成字符串字面量。

6> [83,117,114,112,114,105,115,101].

"Surprise"

7> [1,83,117,114,112,114,105,115,101].

[1,83,117,114,112,114,105,115,101]1不是可打印字符,加上之后就不能自动转换了。

使用$可以打印出某个字符的整数。

9> $1.

49

10> $a.

97

12.f()命令可以让当前的所有绑定都解除。

总结一下:

数据类型

Erlang

C++

整形

无限制

有最大值限制

浮点型

有精度限制

有精度限制

字符串

使用数字来表示

使用字符数组

复合类型

元组,列表

结构和类,数组

因为对erlang的认识还不够深入,所以只能勉强比较。

其实学一门新的语言的时候,不应该无时无刻想着对之前掌握的语言进行对比,想着哪里好用,哪里不好用。

只是这些对照,可以对原来的语言,计算机的基础,以及编译器有更多的认识。

这些都要靠自己去把握了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值