iT邦幫忙

DAY 7
1

蠻可愛的 Erlang 與 Elixir系列 第 7

erlang 7 List操作

  • 分享至 

  • xImage
  •  

前面有提到,在erlang中List扮演了重要的角色.
也在模式比對的範例中,使用了List.
今天來看一下,erlang中的內建函數(BIFs, Build-In Functions),
對List的操作或取得訊息.

1> MyList = [1,2,3,4].
[1,2,3,4]
2> length(MyList).
4
3> hd(MyList).
1
4> tl(MyList).
[2,3,4]

length()是回報List長度,這部份與一般程式語言都相同.
hd()是取出List開頭第一個元素.
tl()是除了第一個元素以外,其他的元素.

這樣做有何用處呢?且讓我們繼續看下去.
接著來看erlang中,使用 | 運算子,在模式比對方式操作中,
做List的切割與合併.

先來看合併:

5> List2 = [2,3,4].
[2,3,4]
6> List3 = [1 | List2].
[1,2,3,4]

再來看切割:
7> [Head | Tail] = List3.
[1,2,3,4]
8> Head.
1
9> Tail.
[2,3,4]

繼續切割:
10> [NewHead | NewTail] = Tail.
[2,3,4]
11> NewHead.
2

也許大家看到這裡,會有疑惑.這樣切割,有何用處呢?
有沒有注意到,到目前為止,沒看到迴圈指令.
一般大家熟知的程式語言,是程序性的,迴圈指令相當重要.
筆者在小時候初學程式語言時,學到迴圈時,著實興奮啊,
可以用來反覆做事情,電腦的主要威力啊.
若得知erlang中,沒有迴圈指令.

不知大家表情是否會像星爺一樣?
在erlang中,我們可以自已很輕易的做一個山寨版的for出來.
請看

-module(myfor).
-export([for/3]).

for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I) | for(I+1, Max, F)].

編譯及執行:

12> c("myfor"). 
{ok,myfor}
13> myfor:for(1,10, fun(I) -> I end).
[1,2,3,4,5,6,7,8,9,10]
14> myfor:for(1,10, fun(I) -> I*I end).
[1,4,9,16,25,36,49,64,81,100]

可以依據函數的不同,產生不同的List出來.
只需兩行程式碼而已! 蠻可愛的erlang!


上一篇
再探模式比對以及用函數當函數參數
下一篇
是遞迴,我加了遞迴.
系列文
蠻可愛的 Erlang 與 Elixir30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言