云计算应该所具备的特质如下:
1. 高负载
2. 正常运转
3. 容错性
4. 分布式
5. 容易伸缩
Erlang(读音:['ə:læŋ]厄兰,中文意思为:占线小时(话务负载单位))正是由于它属于开放的电信业务平台,也就不难理解它的意义了。几乎完全具备以上特质,而且它也是典型的函数式语言。和我们OOP的思想有着截然不同的概念。在以下的学习过程中主要还是以《Erlang程序设计》这本书作为一个学习的依据。
原子
定义:在Erlang中原子用来表示不同的非数字常量值。这里说白了其实就是一种常量的定义。Erlang中原子是全局有效的,不需要像以前c/c++那样通过宏来定义或者包含文件。在定义原子的时候只需要注意以下一些特点就可以:
1. 一般情况原子是以一串以小写字母开头,后面有数字、字母、下划线、邮件符号(@);
2. 使用单引号引用起来的字符也属于原子,例如’Monday’;
3. 一个原子的值就是原子本身;
元组(tuple)
定义:首先它是Erlang中具有特质的一个定义,如果说把它和我们java中的一个JavaBean来类比可能稍显类似,书上引用的是c语言数据结构来解说元组的结构,尽管非强浅显能看懂。但是作为一个java程序员我觉得采用自己熟悉的语言结构来对比,学习效果更佳吧(对于记忆有很大帮助)。
比如我们一般对于JavaBean的定义是如下结构:
public class Person {
private String name;
private int height;
private int footSize;
private String eyeColor;
// get/set...
}
那在我们引用定义的时候就可以直接:
Person person1=new Person();
person1.setName("yeshucheng");
person1.setHeight(111);
person1.setFootSize(40);
person1.setEyeColor("black");
......
与之相对应的是我们使用Erlang来定义了,对于Erlang的定义就截然和c/c++或者java有着明显不同,相对于更加精炼明了:(这里我直接使用书上说的所谓二元组)
Person={person,{name,yeshucheng},{height,111},{footsize,40},{eyecolor,black}}.
没错,就是这么直截了当的来定义,甚至赋值(严格说Erlang不能这么说,但是为了好记忆可以这么理解)
对于以上的定义这里要说明注意的地方:
1. 定义元组,元组中字段没有名字,通常可以使用一个原子作为元组的第一元素来标明(请注意这里花括号内第一原子都是解释逗号后面一个说明),这个元组所能代表的含义就是上面列出的程序定义了。
2. 创建元组,在声明元组的同时其实已经创建了元组,这个也是Erlang的一大特点之一了。如果不再使用,也随之销毁。Erlang使用的垃圾搜集器去收回没有使用的内存。
如:F={firstName,wan}
L={lastName,andy}
P={person,F,L}//这里就应对我们第一条说明的一样第一个名称表示就是后面所有逗号的整体列举,如果在Erlang环境中对于上面写完后,直接敲回车(语句结束后存在”.”这里稍微注意下)就会得到以下结果,正好印证我们所说明这这个问题了
==》{persong,{firstName,wan},{lastName,andy}}.
如果在创建过程中存在一个未定义的变量,则程序编译就会产生错误。
3. 提取元组的字段值,刚才我们在程序中有定义一个Person的元组而且也设置值了,现在如果我们想得到或者说提取我们的值,那需要如何而做呢?首先我们采用基本的元组方式来试着看看如下:
1> Point={point,10,45}.
2> {point,X,Y}=Point.
3> X.
10
4> Y.
45
注明:这里又再次强调下point逗号后面的都是为他而说明的。
1>Person={person,{name,yeshucheng},{height,111},{footsize,40},{eyecolor,black}}.
2>{_,{_,Who},{_,_},{_,_},{_,_}}=Person.
3>Who.
yeshucheng
说明下,如果上面想得到的是值,那么位置响应对号入座然后Who换成What就成(我开始也犯错误,编译立马出错,后来想想用过一个What试试,果然正确,呵呵)。
列表
定义:列表第一个元素称为列表的头(head),后部分称为列表尾(tail),一般[H|T]来标示列表了。
注:列表的头可以是任何东西,但是列表的尾通常还是一个列表。
至于具体的细节问题还是需要找找相关文档看下为好,它的概念牵涉到后面的非常多的定义了。
posted on 2008-12-09 10:20
叶澍成 阅读(1003)
评论(0) 编辑 收藏 所属分类:
erlang学习