云計算應該所具備的特質如下:
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
葉澍成 閱讀(1014)
評論(0) 編輯 收藏 所屬分類:
erlang學習