2008年4月16日

Erlang VS. REBOL, Part VI

* if 與 case
Erlang的if 相當於REBOL的case;Erlang的case相當於REBOL的switch。Erlang的if與case都可以搭配guard使用,但REBOL沒有guard的觀念。

* 將資料放入List
在Erlang中,將資料插入List頭部,是最有效率的作法。但REBOL則是插入尾部才有效率。

* Exception
在Erlang程式中主動發出例外,有三種方式
exit(Why)
throw(Why) 類似Java的可處理例外
erlang:error(Why) 類似Java的Error(嚴重的狀況)

REBOL的例外只有一種,類似上面第二種。

* try/catch
Erlang的try/catch語法比REBOL豐富,類似Java的try/catch/finally。
try FuncOrExpressionSequence of
Pattern1 [when Guard1] -> Expressions1;
Pattern2 [when Guard2] -> Expressions2;
...
catch
ExceptionType: ExPattern1 [when ExGuard1] -> ExExpressions1;
ExceptionType: ExPattern2 [when ExGuard2] -> ExExpressions2;
...
after
AfterExpressions
end


* Stack Trace
erlang:get_stack_trace()可以取得目前的堆疊。REBOL具有類似功能的stack函數。

* Binary
Erlang的binary寫法類似List,但[…]改用<< >>,且每個值都必須介於0到255之間,例如:
<<5,10,20>>

* Bit Syntax
Erlang具有位元語法,可以方便二元檔案或網路封包處理。例如:

> Red = 2
> Green = 61
> Blue = 20
> Mem = << Red:5,Green:6,Blue:5 >>
<<23,180>>

Bit Syntax甚至可以讓你指定big-endian或little-endian或native-endian、signed或unsigned、integer或float或binary。

* 使用者自訂的模組屬性
REBOL和Erlang都允許使用者自行定義的模組屬性。
Erlang:
-my-info(taiwan).

REBOL:
REBOL[

My-info: 'Taiwan
]


* Apply
REBOL和Erlang都支援apply函數。

* Preprocessor
Erlang具有前處理器,用來將檔案含括(include)進來。例如:
-include(FileName)

* Macro
Erlang具有Macro,例如:

-define(macro1(X, Y), {a, X, Y}).
foo(A) ->
?macro1(A+10, b)


會變成

foo(A) ->
{a,A+10,b}.



沒有留言: