我陷入了一些基本的递归,因为这种语言对我来说是全新的,我想将整数从一个列表复制到另一个列表。
这就是我所拥有的:
cpy_list(L) -> cpy_list(L, []).
cpy_list([], Acc) -> Acc;
有人能告诉我工作解决方案的外观吗?
答案 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]