2011-08-30 8 views
5

De los dos pares de comparaciones, ¿cuál (de cada par) es más caro para los recursos del sistema en Erlang:listas: anexar/2 frente a erlang: '++'/2, añadiendo al final de la lista Versus anexando a su encabezado

Qn1:lists:append(L1,L2) frente erlang:'++'(L1,L2)
QN2 escribiendo a la cabeza de una lista con decir: [NewHead|List] frente escrito al final de la lista con: List ++ [NewValue]

he pedido esto porque hay es una parte intensiva de mi programa que h leerá y escribirá en listas. Necesito decidir si voy a escribir en la cabecera de las listas o escribiendo a sus fines, o viceversa.

Respuesta

18

1: Tienen la misma función. 'append' es un alias para '++' (o viceversa). Consulte también Erlang ++ operator. Syntactic sugar, or separate operation?

2: No construya una lista de forma incremental añadiéndola. Agregar una vez es correcto, pero agregarlo en un bucle le dará un comportamiento cuadrático. Es decir, AddedStuff ++ Acumulator está bien (incluso en un bucle), porque estás creciendo "hacia la izquierda", pero Accumulator ++ AddedStuff en un bucle (creciendo hacia la derecha) es realmente malo. Es mucho mejor crecer hacia la izquierda y luego invertir o ordenar luego si el orden es importante.

Cuestiones relacionadas