-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) of 1-> 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]}