- 返回多个值
返回多个值
我们经常想让一个函数返回多个值,使用元组来实现这一目的是十分方便的。
例如,函数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]