Предполагая, что вы хотите заменить все экземпляры и сохранить порядок списка (работает со всеми терминами):
replace(Old, New, List) -> replace(Old, New, List, []).
replace(_Old, _New, [], Acc) -> lists:reverse(Acc);
replace(Old, New, [Old|List], Acc) -> replace(Old, New, List, [New|Acc]);
replace(Old, New, [Other|List], Acc) -> replace(Old, New, List, [Other|Acc]).
Для фильтра уникальных элементов вам необходимо сохранить состояние элементов, которые у вас есть.уже посмотрел.
Было бы очень неудобно реализовывать такую функцию, используя только сопоставление с шаблоном в заголовках функций, и вы бы ничего не получили (производительность) от нее.Неловкость может возникнуть из-за необходимости циклически проходить как по рассматриваемому списку, так и по спискам, сохраняя ваше состояние уже проанализированных элементов.Вы также потеряете много читабельности.
Я бы порекомендовал пойти на что-то более простое (работает со всеми терминами, а не только с атомами):
unique(List) -> unique(List, []).
unique([], Counts) ->
lists:foldl(fun({E, 1}, Acc) -> [E|Acc];
(_, Acc) -> Acc
end, [], Counts);
unique([E|List], Counts) ->
unique(List, count(E, Counts).
count(E, []) -> [{E, 1}];
count(E, [{E, N}|Rest]) -> [{E, N + 1}|Rest];
count(E, [{X, N}|Rest]) -> [{X, N}|count(E, Rest)].