2011-08-30 6 views
5

Delle due coppie di confronti dati, quale (di ciascuna coppia) è più costoso per Risorse di sistema in Erlang:: append/2 contro erlang: '++'/2, accodandosi alla fine della lista Verso accodandosi al suo capo

Qn1:lists:append(L1,L2) contro erlang:'++'(L1,L2)
QN2 scrivendo alla testa di una lista con dire: [NewHead|List] rispetto per iscritto al fine dell'elenco con: List ++ [NewValue]

ho chiesto questo perché ci è una parte intensiva del mio programma h leggerò e scriverò in liste. Devo decidere se scrivere ai capi delle liste o scrivere ai loro scopi, o viceversa.

risposta

18

1: sono la stessa funzione. 'append' è un alias per '++' (o viceversa). Vedi anche Erlang ++ operator. Syntactic sugar, or separate operation?

2: non creare un elenco in modo incrementale aggiungendo. L'aggiunta una volta è OK, ma l'aggiunta in un ciclo ti darà un comportamento quadratico. Ad esempio, AddedStuff ++ Accumulator è OK (anche in loop), perché stai crescendo "a sinistra", ma Accumulator ++ AddedStuff in un ciclo (crescente a destra) è davvero pessimo. È molto meglio crescere a sinistra e poi invertire o ordinare in seguito se l'ordine è importante.