三、初识Erlang之浮点,原子与元组
上篇回顾
上一篇文章我们讲到了erlang的变量使用方式,包含了erlang与传统编程语言的不同,以及为何不同!我们来回复一下上节重点。
1> X=120.
120
2> Y=100.
100
3> Z = X * Y.
12000
首先erlang中的变量是以大写字母开头的。=表示模式匹配,Lhs=Rhs,对右端(Rhs)进行求值,然后将结果与左端(Lhs)进行模式匹配。 本章我们还会用到这个模式匹配的其他用法。 接下来我们又讲到了为何erlang采用单一赋值模式以及这样做的好处,这样做erlang的每一个变量都只是一个值,不可改变状态的值,也就不用进行共享内存了,更不用加锁了。上章的内容比较少,也比较简单,之所以讲得的少,一来是我们刚刚入门这类函数式编程语言,与我们之前的面向对象编程毫不相干,在概念上也不太一样。我们要走稳每一步,虽然内容比较少,但我们要为后面的课程打好坚实的基础。好了,废话补多少,直接进入今天主题。
内容介绍
1、浮点数
2、原子
3、元组
Erlang之浮点数
在erlang中的计算浮点数与我们常接触的java ,C# 有些不同。这也是我要单拿出讲解一下的原因。在java中,我们这样写:float a = 10 / 3,输出a 会得到 3.但是我们在erlang中却不是这样的。我们来看下面这个实例。
1> 10/3.
3.3333333333333335
2> 4/2.
2.0
3>
从上面的实例中我们可以看出erlang中的“/”直接求出计算结果,且结果为一个浮点数。哪怕是当结果为整数时,计算结果也会是浮点数。从4/2=2.0我们可以看出。那么在erlang中用什么来表示整数除和求余值呢。在erlang中“div”表示整数除。“rem”表示取余。
1> 4 div 2.
2
2> 5 rem 3.
2
3>
“/”永远返回浮点数。“div” 表示整数除,“rem”表示取余数。
Erlang之原子
在Erlang中,原子就表示不同的非数字常量值。 这个原子可能对于我们来说可能是新概念。但是我们写过java,C的都应该写过,我们会声明一些符号常量,来增加代码的可读性。我记得写C或者C++的人会专门提出一个global.h来定义声明宏变量。而在erlang中原子都是全局的。无需使用宏定义或者专门的类文件。
原子是以一串以小写字母开头,后面跟着下划线(_)或者邮件符号(@)或者是数字的字符。如,red,lucky_happy等。原子也可以用单引号括起来。‘red’实际上就等于red,一个原子的值就是原子本身。
1>hello.
Hello
2>
Erlang之元组
在erlang中有一种实体叫元组。将若干个以逗号分隔的字符串用{}括起来就形成了一个元组,我们举个简单的例子:{zheng,zhi},这个元组就表示一个人的姓名,当然也可以字符串加浮点数,例如我要描述一下某人的体重,{zhengzhi,65} 表示这个人的体重是65kg。
在C#中我们是这样的。
Struct Person
{
String Name,
String Height,
}
在取值或者赋值的时候这样取Person.Name ,Person.Height;
在erlang中可是没有类型的。在erlang中是这样的:我们用到了匹配模式
Person={zhengzhi,65}.
我们将右侧的元组匹配给左侧的person。那么在erlang中是没有字段名字的,如果单独来个{zhengzhi,65},谁知道这是个啥玩儿。所以我们为了方便记忆,我们将person作为整个元组的第一个元素{person,zhengzhi,65},这样我们就知道了,这个人的名字和身高。
在元组中我们可以嵌套元组。请看下面的例子:
1>N={zheng,zhi}.
{zheng,zhi}
2>H ={65}.
{65}
3>Info = {person,N,H}.
{person,{zheng,zhi},{65}}
在erlang中声明元组的时候就自动创建了元组,不在使用它时,元组也随之销毁。Erlang使用垃圾搜集去收回没有使用的内存。所以我们也可以像java,C#一样不需要去担心内存问题。
好了,赋值是玩明白了,我们接下来要去取值。这时候还会用到匹配模式。
且看示例:
1>P ={point,10,20}.
{10,20}
我们先声明一个坐标,然后再取值之前,我们要创建一个与上面这个元组相同结构的元组,然后通过匹配模式将P元组赋值给新创建的元组
2> {point,X,Y} =P.
{point,10,20}
3>X.
10
4>Y.
20
我们可以看到,10和20分别绑定到了X和Y上面,这时候我们在取出X和Y的值。正如你所见,匹配元组要让两边的元组结构相同。所以当我们匹配成{point,X,X}值的时候就会报错。至于为什么报错,我就不解释了,前面已经讲过了。不明白的要去多理解,多练习。
我们在来一个复杂的元组
1>Person={person,{name,zhengzhi},{height,65}}.
{person,{name,zhengzhi},{height,65}}
2>{person,{_,Who},{_,_}}=Person.
{person,{name,zhengzhi},{height,65}}
3>who.
zhengzhi
在erlang中,“_”符号表示匿名变量,说白了就是个占位符。用来表示我们不关心的变量。与常规变量不同的是。在同一个模式的不同地方。各个_所绑定的值也有所不同。
写文章不易,学习更不易,且学且珍惜吧..

浙公网安备 33010602011771号