目的如题. 主函数是split_integer/1, 这里用到了Erlang提供的尾递归功能. 存储到文件me.erl中
-module(me).
-compile(export_all).
split_integer(L) ->
L1=lists:reverse(L),
split_integer_a([],L1,[]).
split_integer_a([],[],Result) -> Result;
split_integer_a(R1,[],Result) -> [list_to_integer(R1)|Result];
split_integer_a(R1,[H|T],Result) ->
if
H==32 ->
if
R1==[] -> split_integer_a([],T,Result);
true -> split_integer_a([],T,[list_to_integer(R1)|Result])
end;
true -> split_integer_a([H|R1],T, Result)
end.
进入erlang shell:
1> c(me).
{ok,me}
2> me:split_integer("1 2 3 4 5 6789").
[1,2,3,4,5,6789]
练习题: 如果问题改为用空格分开的是小数和整数的混合字符串又该如何? 或者分隔符是别的呢? 动动脑筋哟 (:
利用Erlang标准库中string模块的tokens/2函数, 可以使得上面的任务变得非常简单.
split_integer(String,SeparatorList) ->
lists:map(fun(SubString)->list_to_integer(SubString) end, string:tokens(String,SeparatorList)).