Вы всегда можете сделать что-то вроде этого:
t([{"subject", V}|T]) -> [{subject, V}|t(T)];
t([{"done" , V}|T]) -> [{done, V}|t(T)];
t([_ |T]) -> t(T) ; % optional garbage ignoring clause
t([]) -> [].
Но я сомневаюсь, это будет значительное улучшение скорости в вашем случае.
Может быть, вы сможете выжать последний бит изэто:
-compile({inline, [t/1]}).
t(L) -> t(L, []).
t([{"subject", V}|T], A) -> t(T, [{subject, V}|A]);
t([{"done" , V}|T], A) -> t(T, [{done, V}|A]);
t([_ |T], A) -> t(T, A); % optional garbage ignoring clause
t([], A) -> A.
Что стоит только для соревнований по тестированию кода ;-) (Обратите внимание, что в последнем предложении нет вызова lists:reverse/1
. Это приведет к разрушению улучшения из предыдущей версии.)
PS: Если вы думаете, что я фанат микро-оптимизации, вы правы, поэтому я бы заменил lists:reverse/1
call на lists:reverse/2
, чтобы напрямую использовать BIF и сэкономить еще немного времени; -)