三、初识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中,“_”符号表示匿名变量,说白了就是个占位符。用来表示我们不关心的变量。与常规变量不同的是。在同一个模式的不同地方。各个_所绑定的值也有所不同。

 

 写文章不易,学习更不易,且学且珍惜吧.. 

posted @ 2014-09-16 11:01  lucky and happy  阅读(285)  评论(0)    收藏  举报