apply
Applies a function to every element in a container.
Syntax

apply(X, f[, n])

X
is a container that is not a set 
f
is a function 
n
is a positive integer


apply(S, f)

S
is a set 
f
is a function

Description
If X
is any container (including a set) and f
a function, then apply(X, f)
returns a copy of X
in which each element x
has been replaced by its image f(x)
under f
. For a set, this means that the cardinality of the result may be less than the cardinality of X
unless f
is injective.
If X
is not a set, apply(X, f, n)
will replace the elements at level n
with their images under f
, with level n = 1
being the top level (X
itself).
The @
operator is mapped to the apply
function. Hence, instead of apply(X, f)
you typically write X @ f
. This is particularly convenient when you need to apply several functions in succession: X @ f @ g ⋯
.
Examples
sort(frequencies(compute(RandomInt(1000000)^2, n, 1, 1000000) @ digits @ first))
(1, 192164) (2, 146925) (3, 123873) (4, 109158) (5, 98564) (6, 90439) (7, 84566) (8, 79092) (9, 75219)
Alice ≔ ExampleData("Alice in Wonderland") \ 50
ALICE’S ADVENTURES IN WONDERLAND Lewis Carroll …
sort(frequencies(words(Alice) @ characters @ first @ UpperCase))
(A, 3358) (B, 984) (C, 903) (D, 829) (E, 378) (F, 742) (G, 574) (H, 1575) (I, 1968) (J, 120) (K, 262) (L, 747) (M, 897) (N, 574) (O, 1430) (P, 493) (Q, 186) (R, 491) (S, 2530) (T, 4428) (U, 262) (V, 238) (W, 1864) (X, 3) (Y, 550) (Z, 2)
apply(SequenceList(4) @ IdentityMatrix, sin, 2)
(0.841470984808) ⎛0.841470984808 0⎞ ⎝ 0 0.841470984808⎠ ⎛0.841470984808 0 0⎞ ⎜ 0 0.841470984808 0⎟ ⎝ 0 0 0.841470984808⎠ ⎛0.841470984808 0 0 0⎞ ⎜ 0 0.841470984808 0 0⎟ ⎜ 0 0 0.841470984808 0⎟ ⎝ 0 0 0 0.841470984808⎠