首页 > Erlang并发教程 > 4.9 Erlang并发编程-构建同构列表
2013
11-06

4.9 Erlang并发编程-构建同构列表

构建同构列表
有时我们会想构造一个形如输入列表的列表,但同时又要对输入列表的每个元素做些操作。这时可以这么写:

isomorphic([X|T]) ->
    [something(X)|isomorphic(T)];
isomorphic([]) ->
    [].

然后,比如我们想写一个将给定列表中的所有元素翻倍的函数,我们就可以这么写:

double([H|T]) ->
    [2 * H | double(T)];
double([]) ->
    [].

于是便有:

> lists1:double([1,7,3,9,12]).
[2,14,6,18,24]

事实上这种手法只能作用于列表的最上层,因此如果我们想遍历列表的所有层次,我们就得将函数定义修改如下:

double([H|T]) when integer(H)->
    [2 * H | double(T)];
double([H|T]) when list(H) ->
    [double(H) | double(T)];
double([]) ->
    [].

后一个版本就可以成功遍历深层的嵌套列表了:

> lists1:double([1,2,[3,4],[5,[6,12],3]]).
[2,4,[6,8],[10,[12,24],6]]

留下一个回复

你的email不会被公开。