Sha256: b7d031aecacb5007a011573acf69b67b27d32b5d2fbf98d1dfec2a4d2e0d8a54

Contents?: true

Size: 1.06 KB

Versions: 188

Compression:

Stored size: 1.06 KB

Contents

defmodule Strain do
  @doc """
  Given a `list` of items and a function `fun`, return the list of items where
  `fun` returns true.

  Do not use `Enum.filter`.
  """
  @spec keep(list :: list(any), fun :: ((any) -> boolean)) :: list(any)
  def keep(list, fun) do
    do_keep(list, fun, [])
  end

  defp do_keep([], _, results), do: Enum.reverse(results)
  defp do_keep([head | tail], fun, results) do
    case apply(fun, [head]) do
      true -> do_keep(tail, fun, [head | results])
      _ -> do_keep(tail, fun, results)
    end
  end

  @doc """
  Given a `list` of items and a function `fun`, return the list of items where
  `fun` returns true.

  Do not use `Enum.reject`.
  """
  @spec discard(list :: list(any), fun :: ((any) -> boolean)) :: list(any)
  def discard(list, fun) do
    do_discard(list, fun, [])
  end

  defp do_discard([], _, results), do: Enum.reverse(results)
  defp do_discard([head | tail], fun, results) do
    case apply(fun, [head]) do
      true -> do_discard(tail, fun, results)
      _ -> do_discard(tail, fun, [ head | results ])
    end
  end
end

Version data entries

188 entries across 188 versions & 1 rubygems

Version Path
trackler-2.2.1.109 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.108 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.107 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.106 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.105 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.104 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.103 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.102 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.101 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.100 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.99 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.98 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.97 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.96 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.95 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.94 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.93 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.92 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.91 tracks/elixir/exercises/strain/example.exs
trackler-2.2.1.90 tracks/elixir/exercises/strain/example.exs