Вы ищете Enum.reject/2
Enum.reject(~w|a b c a a|a, & &1 == :a)
#⇒ [:b, :c]
Sidenote: использование трубы для одной операции Elixir считается антишаблономосновная команда.
Другая (более гибкая) возможность - использовать Enum.reduce/3
:
~w|a b c a a|a
|> Enum.reduce([],
&(if &1 == :a, do: &2, else: [&1 | &2]))
|> :lists.reverse()
#⇒ [:b, :c]
Более эрлангский (и элегантный)подход будет использовать рекурсию:
defmodule M do
def get_rid_of(e, list, acc \\ [])
def get_rid_of(_, [], acc),
do: :list.reverse(acc)
def get_rid_of(e, [e | rest], acc),
do: get_rid_of(e, rest, acc)
def get_rid_of(e, [o | rest], acc),
do: get_rid_of(e, rest, [o | acc])
end
M.get_rid_of :a, ~w|a b c a a|a
#⇒ [:b, :c]