返回多个值
返回多个值
我们经常想让一个函数返回多个值,使用元组来实现这一目的是十分方便的。
例如,函数parse_int(List)从一个由ASCII字符构成的列表List中提取最开始的数字,如果存在,就返回一个由被提取出来的数字和列表剩下的部分组成的元组,如果列表中没有数字的话,就返回原子式eoString。
parse_int(List) ->
parse_int(skip_to_int(List), 0).
parse_int([H|T], N) when H >= $0, H =< $9 ->
parse_int(T, 10 * N + H - $0);
parse_int([], 0) ->
eoString;
parse_int(L, N) ->
{N,L}.
skip_to_int(L)返回L中第一个以ASCII字符0到9中的任意一个开始的子列表。
skip_to_int([]) ->
[];
skip_to_int([H|T]) when H >= $0, H =< $9 ->
[H|T];
skip_to_int([H|T]) ->
skip_to_int(T).
如果我们使用字符串"abcd123def"("abcd123def"的列表形式是[97,98,99,49,50,51,100,101,102])来测试parse_int:
> tuples:parse_int("abc123def").
{123,[100,101,102]}}
在parse_int的基础上,可以实现一个提取所有嵌入在字符串里面的数字的解释器。
parse_ints([]) ->
[];
parse_ints(L) ->
case parse_int(L) of
eoString ->
[];
{H,Rest} ->
[H|parse_ints(Rest)]
end.
因此:
> tuples:parse_ints("abc,123,def,456,xx").
[123,456]
