Home 博客 tags erlang

知力企业博客

上善若水 厚德载物

Tag >> erlang

Erlang知识-变量及数据类型

Posted by: bin in erlang on

公司里有项目要用到Erlang,关于Erlang的介绍,这里先简单交代一下

Erlang是一个丹麦的数学家,他搞出来的一个概率分布Erlan分布,并且用这个分布开创一们学科排队理论,电信上经常用这个分布来测算话务量,因此在电信界比较有名.当年Joe Amstrong把他的语言命名为Erlang也是为了纪念这个为电信领域作出过卓越贡献的人.
   Erlang是Ericsson和Ellemtel Computer ScientceLaboratories为解决电信领域中的并发和分布式问题,设计的语言;从理论应用于实践的角度讲,主要探索的是函数式语言能否应用到通信领域的大型交换机上,从Erlang的实践效果来看,答案是肯定的。
    Erlang的优点:
    (1) Code Loading Primitives允许在系统运行过程中升级代码。
    (2) Erlang的轻量级进程可以支持极高的并发性,而且在高并发的情况下内存使用相当的少。Erlang的并发性并不会受到宿主操作系统并发性的限制。Erlang的原子操
作是一个压栈级别的,而C语言是指令级别的。
   (3)最开始Erlang的设计目标就是实现分布式环境,一个Erlang的虚拟机就是一个Erlang网络上的节点。一个Erlang节点可以在另一个-Erlang节点上创建自己的并发进程,而子进程所在的节点可能是运行其他的操作系统的服务器。不同节点的之间的可以进行极为高效而又精确的通信,就像它们运行-在同一个节点一样。
    (4)Erlang内部建设有多种错误检测原语。我们可以通过这些原语来架设高容错性的系统。例如,一个进程可以监视其他进程的状态和活动,即使那些被监 -控的进程处于其他节点。在分布式状态下,我们可以把系统配置成具有Fail-over功能的分布式系统。当有其他节点出错的时候,系统会把他的运行场景自动快速-的切换备份节点上。
    (5) Erlang是一个"软"实时系统(Soft Real Time),它可以提供毫秒级别的响应。

变量
所有的变量都必须以大写字母开头。
X = 12832.
如果再执行 X=1244.则报错了。
注意:在Erlang中,X不是一个变量,至少不是你在Java或C中的那种变量。
另外,=不是赋值操作符。而模式匹配,变量只能被赋值一次。当我们第一次输入X=12832时,Erlang会问自己,"要怎么做才能让这样语句的值变是true?"(注:erlang的每一个语句都会有值),由于X没有被赋值,因此可以把12832绑定到X上。同时也使得语句有效。


浮点数
1> 5/3.
1.66667
2> 4/2.
2.00000
3> 5 div 3.
1
"/"永远返回浮点数。

原子
用来表示不同的非数字常量值。类似于java/c中的枚举类型。原子是一串以小写字母开头、后跟数字、字母或下划线(_)或邮件符号(@)的字符。而且原子是全局有效的,而且无需使用宏定义或者包含文件。
比如,red、december、a_login_name
使用单引号引起来的字符也是原子,一个原子的值就是原子自身。比如,'a'就等同于a

元组
将一定数量的项目组成单一的实体,那么就可以使用元组(tuple)。将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。如{ supercode, 1.75}.这个元组就包括了一个原子和一个浮点数。 元组类似于C语言中的结构。

  • 创建元组
    在声明元组时,就自动创建了元组,不需要时,元组也自动销毁。因为erlang有垃圾回收。

2> F = {firstName, joe}.
{firstName,joe}
3> L = {lastName, armstrong}.
{lastName,armstrong}
4> P = {person, F, L}.
{person,{firstName,joe},{lastName,armstrong}}


  • 从元组中提取字段值
    1> Point = {point, 10, 45}.
    {point, 10, 45}.
    2> {point, X, Y} = Point. 
    {point,10,45}
    3> X.
    10
    4> Y.
    45

注意
{my,X,Y}=Point, 将出错,因为my与point不匹配,如果{Mypoint,X,Y}=Point. 那么是正确的.

列表
列表用来存储数目可变的东西,如在商店里买到的商品。将若干个以逗号分割的值用一对方括号括起来,就形成了一个列表。
1> ThingsToBuy = [{apples,10},{pears,6},{milk,3}].
[{apples,10},{pears,6},{milk,3}]

列表之中的各个元素可以有各自不同的类型。
2> [1+7,hello,2-2,{cost, apple, 30-20},3].
[8,hello,0,{cost,apple,10},3]

列表的第一个元素称为列表的头(head),除去头,剩下的东西称为列表的尾。注意,列表的头可以是任意东西,但列表的尾通常还是一个列表。

3> ThingsToBuy1 = [{oranges,4},{newspaper,1}|ThingsToBuy].
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]

4> [Buy1|ThingsToBuy2] = ThingsToBuy1.
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
绑定结果如下
Buy1 7→ {oranges,4}


字符串
严格地讲,Erlang中并没有字符串,字符串实际上也就是一个整数列表。
1> Name = "Hello".
"Hello"

可以用$符号来表示字符中整数值。
5> I = $s.
115
6> [I-32,$u,$r,$p,$r,$i,$s,$e].
"Surprise"




友情链接: 上海市企业信息化促进中心 国家工业和信息化部 中国信息安全评测认证中心 中国教育网 多特软件站 天空软件站 华军软件园 上海西楚礼仪