将一个列表复制到另一个列表

时间:2014-08-24 23:34:10

标签: erlang

我陷入了一些基本的递归,因为这种语言对我来说是全新的,我想将整数从一个列表复制到另一个列表。

这就是我所拥有的:

cpy_list(L) -> cpy_list(L, []).
cpy_list([], Acc) -> Acc;

有人能告诉我工作解决方案的外观吗?

5 个答案:

答案 0 :(得分:3)

cpy_list/2

还需要一个子句
cpy_list(L) -> cpy_list(L, []). % Starting condition 

cpy_list([H|T], Acc) -> cpy_list(T, Acc ++ [H]); % take the first element and add to Acc
cpy_list([], Acc) -> Acc.

当然,它不是一个理想的解决方案,因为它效率不高。请参阅此处的注释:http://www.erlang.org/doc/efficiency_guide/listHandling.html

由于变量在erlang中是不可变的,我怀疑复制列表有什么意义。

答案 1 :(得分:1)

在Erlang中,将变量分配给新变量是"复制"从开到另一个的内容。 (没有指针!)

所以你不需要它的特殊功能。

TheList = [1,2,3,4,5].
CpyList = TheList.

答案 2 :(得分:0)

cpy_list(L) -> cpy_list(L, []).

cpy_list([], Acc) -> lists:reverse(Acc);
cpy_list([H|T], Acc) ->
    cpy_list(T, [H|Acc]).

以下是代码,您可以使用Tail-recursive

答案 3 :(得分:0)

在Erlang中,因为所有数据都是不可移植的,所以复制列表没有意义。您操作列表所做的任何操作都将生成原始列表的更改副本。如果你确实想复制一个列表,那就像运行一样简单:

List = [1,2,3],
NewList = lists:map(fun(X) -> X end, List).

因为lists:map/2将始终返回一个新列表,这将有效!您可以使用map/2轻松地在原始列表中执行您的更改,并且它将返回一个全新的列表。

答案 4 :(得分:0)

一旦也可以使用列表理解:

ListCopy = [Entry || Entry <- ListOriginal]