A.List (Aja v0.2.0) View Source

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

Link to this section Summary

Functions

Populates a list of size n by calling generator_fun repeatedly.

Link to this section Functions

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 # because: iex> Enum.to_list(1..0) [1, 0]

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