2008年4月16日

Erlang VS. REBOL, Part II

* Word與Atom
Erlang所謂的Atom,其實就是REBOL所謂的Word。Erlang規定Atom只能使用小寫字母、底線(_)、阿拉伯數字。REBOL對於Word沒有這樣的規範,REBOL的Word甚至可以使用各國文字(因為REBOL有支援Unicode)。Erlang的Atom沒有繫結值(也可以視為繫結到自己),而變數有繫結值;REBOL則不管有沒有繫結值,一律都是Word。

* Erlang Tuple – REBOL Block
Erlang所謂的Tuple,其實就是REBOL的Block。Erlang Tuple使用{},且元素之間要用逗號(,)隔開;REBOL使用[]。

Erlang:
{"Jerry", "Tsai", 1.77 }

REBOL:
["Jerry" "Tsai" 1.77 ]

* Object
許多Erlang使用Tuple的場合,在REBOL中不見得要用Block,可以改用Object,但Erlang不支援Object。

* Unification
使用模式比對(Pattern Matching)來取出值,稱為Unification。Erlang有支援Unification。REBOL則必須透過Set函數。

Erlang:
P = {"Jerry", "Tsai", 1.77 }
{F, L, H} = P
現在F被繫結到"Jerry";L被繫結到"Tsai";H被繫結到1.77。

REBOL的寫法:
P: ["Jerry" "Tsai" 1.77 ]
Set [F L H] P

* Erlang List – REBOL Block
除了Tuple,Erlang還有List(清單)。你可以把Tuple(值組)想成是C語言的Struct,List想成是動態陣列。Erlang所謂的Tuple和List,對REBOL來說都是Block。

Erlang:
T = [1, 2, 3]
L = [4, 5|T]

相當於REBOL:
T: [1 2 3]
L: Join [ 4 5 ] T

* 取出List元素
Erlang List的Head可以非常有效率地被取出。幾乎所有處理List的函數,都是先取出Head,做處理,再遞迴地處理Tail。

Erlang:
[X|Y] = L

或者利用BIF(Build-in Function)
X = hd(L)
Y = tl(L)

REBOL的作法:
X: First L
Y: Next L

沒有留言: