【erlang】練習題0000.基礎遞歸練習

erlang沒有for循環,這怪異的遞歸寫法很彆扭。

做題之前把這段代碼牢記在心裏,不是死記,要理解。

%模塊名不重要
-module(lib_misc).
-export([for/3]).

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

然後再理解標準庫的lists模塊下的map方法的源代碼

-module(lists).
-export([map/2]).

map(_,[])   ->[];
map(F,[H|T])->[F(H)|map(F,T)].

 

 

 

0.給定一個數Max,和數Min,從Max到Min降序輸出列表

例如:seq_min(10,3).  返回[10,9,8,7,6,5,4,3].

 

想了半天,纔開始寫的都是死循環,共勉。

-module(lib_m).
-export([each/1,each/2]).

each(N)    -> each(N,0).
each(N,N)  -> [N];
each(N,L)  -> [N|each(N-1,L)].

 


列表推導,是個很好用的技巧,在我看來更像foreach

 L = lists:seq(0,10).

利用seq生成[0,1,2,3,4,5,6,7,8,9,10]

然後對每個元素 * 2

[ 2*X || X <- L ].

返回[0,2,4,6,8,10,12,14,16,18,20]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章