A.List (Aja v0.4.3) View Source

Some extra helper functions for working with lists, that are not in the core List module.

Link to this section Summary

Functions

Prepends an element to a list, equivalent of [elem | list] that can be used in a pipe.

Populates a list of size n by calling generator_fun repeatedly.

Link to this section Functions

Prepends an element to a list, equivalent of [elem | list] that can be used in a pipe.

Examples

iex> [2, 3, 5, 8] |> A.List.prepend(1)
[1, 2, 3, 5, 8]
Link to this function

repeatedly(generator_fun, n)

View Source

Populates a list of size n by calling generator_fun repeatedly.

Examples

# Although not necessary, let's seed the random algorithm
iex> :rand.seed(:exsplus, {1, 2, 3})
iex> A.List.repeatedly(&:rand.uniform/0, 3)
[0.40502929729990744, 0.45336720247823126, 0.04094511692041057]

# It is basically just syntactic sugar for the following:
iex> Stream.repeatedly(&:rand.uniform/0) |> Enum.take(3)

Rationale

  • It has a consistent API with Stream.repeatedly/1 and List.duplicate/2

  • It provides a less verbose way of writing one of the most common uses of Stream.repeatedly/1

  • It removes the temptation to write the following, which is more concise but is technically incorrect:

    iex> incorrect = fn n -> for _i <- 1..n, do: :rand.uniform() end
    iex> incorrect.(0) |> length()
    2
    iex> Enum.to_list(1..0)  # <- because of this
    [1, 0]

This is the same problem that A.ExRange is addressing.