2007-09-18

[舊文]Programming Erlang

2007年5月出版,現在買不知道能不能算先知先覺 XD
Erlang 很 functional。如果你之前學過 Scheme,又接觸過一點 Haskell (主要是為了 lazy evaluation 的觀念和一些語法糖衣 -- 在 Scheme/LISP 沒有的糖衣),那麼 Erlang 的循序編程學起來就會很快。比方說,大家都愛的 qsort 例子:

qsort([]) -> [];
qsort([Pivot|T] ->
qsort([X || X <- T, X < Pivot])
++ [Pivot] ++
qsort([X || X <- T, X >= Pivot]).

書上說++效率不彰, well, 在我看到更有效率的做法之前,這樣已經很漂亮了。更棒的是這個例子:

perms([]) -> [];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].

讚吧... 要排列原來是這麼容易的事:

perms("123")
["123","132","213","231","312","321"]

當然,Erlang 的重點在 concurrent 編程,這個還沒讀到... 最近漫畫看太多了(汗)