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]