списки: добавление / 2 против erlang: '++' / 2, добавление в конец списка и добавление к его главе - PullRequest
5 голосов
/ 30 августа 2011

Из двух приведенных пар сравнений какая (из каждой пары) дороже системных ресурсов в Erlang:

Qn1: lists:append(L1,L2) против erlang:'++'(L1,L2)
Qn2 Запись в начало списка с помощью: [NewHead|List] против записи в конец списка с: List ++ [NewValue]

Я спрашивал об этом, потому что есть интенсивная часть моей программы, которая будет читать и записывать в списки. Мне нужно решить, буду ли я писать в заголовки списков или писать до конца, или наоборот.

1 Ответ

18 голосов
/ 30 августа 2011

1: это одна и та же функция.'append' является псевдонимом для '++' (или наоборот).См. Также Оператор Erlang ++.Синтаксический сахар или отдельная операция?

2: не создавать список постепенно, добавляя.Добавление один раз - это нормально, но добавление в цикл даст вам квадратичное поведение.То есть, с помощью AddedStuff ++ Accumulator все в порядке (даже в цикле), потому что вы растете «влево», но Accumulator ++ AddedStuff в цикле (растет вправо) действительно плохо.Гораздо лучше расти влево, а затем повернуть вспять или отсортировать, если порядок важен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...