【发布时间】:2011-11-06 16:28:04
【问题描述】:
在两个给定的比较对中,哪一个(每对)对 Erlang 中的系统资源来说更昂贵:
Qn1: lists:append(L1,L2) 与 erlang:'++'(L1,L2)
Qn2 写到列表的头部说:[NewHead|List] 与写到末尾列出:List ++ [NewValue]
我问这个是因为我的程序中有一个密集的部分将读取和写入列表。我需要决定是写给列表的头还是写到它们的末尾,反之亦然。
【问题讨论】:
在两个给定的比较对中,哪一个(每对)对 Erlang 中的系统资源来说更昂贵:
Qn1: lists:append(L1,L2) 与 erlang:'++'(L1,L2)
Qn2 写到列表的头部说:[NewHead|List] 与写到末尾列出:List ++ [NewValue]
我问这个是因为我的程序中有一个密集的部分将读取和写入列表。我需要决定是写给列表的头还是写到它们的末尾,反之亦然。
【问题讨论】:
1:它们是相同的功能。 'append' 是 '++' 的别名(反之亦然)。另见Erlang ++ operator. Syntactic sugar, or separate operation?
2:不要通过追加来逐步构建列表。追加一次是可以的,但在循环中追加会给你二次行为。即,AddedStuff ++ Accumulator 是可以的(即使在循环中),因为你正在“向左”增长,但是 Accumulator ++ AddedStuff 在一个循环中(向右增长)真的很糟糕。如果顺序很重要,最好先向左增长然后反转或排序。
【讨论】: