快乐的倒腾之try-catch学习
-module(tryCatch).-export([generate/1, demo/0]).generate(1) -> a;generate(2) -> throw(a);generate(3) -> exit(a); generate(4) -> {'exit', a};generate(5) -> erlang:error(a).demo()-> [catcher(I) || I<-[1,2,3,4,5,6]].catcher(N)->try generate(N) of Val ->{N, normal, Val} catch throw:X -> {N, caught, thrown, X}; exit:X ->{N, caught, exited, X}; error:X ->{N, caught, error, X} end. ?
运行结果:
6> tryCatch:demo().[{1,normal,a}, {2,caught,thrown,a}, {3,caught,exited,a}, {4,normal,{exit,a}}, {5,caught,error,a}, {6,caught,error,function_clause}]?
基偶数列表查找
odds_and_evens(L)-> Odds=[X || X<-L, (X rem 2)=:=1], Evens=[X||X<-L, (X rem 2)=:=0], {Odds, Evens}.odds_and_evens_acc(L)-> odds_and_evens_acc(L, [], []).odds_and_evens_acc([H|T], Odds, Evens)-> case (H rem 2) of1-> odds_and_evens_acc(T, [H|Odds], Evens);0 -> odds_and_evens_acc(T, Odds, [H|Evens]) end;odds_and_evens_acc([], Odds, Evens) -> {Odds, Evens}.??
运行结果:
51> tryCatch:odds_and_evens([1,5,6,8,4,15,42,43]).{[1,5,15,43],[6,8,4,42]}??
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?