The Erlang notation [ F(X) || X <- L]
means "the list of F(X) where X is taken from the list L."
1> L = [1,2,3,4,5]. [1,2,3,4,5] 2> [2*X || X <- L ]. [2,4,6,8,10]
Thus, [2*X || X <- L ]
means "the list of 2*X where X is taken from the list L."
There's tons of other really really cool stuff you can do. Like qsort(L)
for quick sorting lists:
qsort([]) -> []; qsort([Pivot|T]) -> qsort([X || X <- T, X < Pivot]) ++ [Pivot] ++ qsort([X || X <- T, X >= Pivot]).
Or perms(S)
for generating all possible permutations of a string:
perms([]) -> [[]]; perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
Or pythag(N)
for generating all Pythagorean triplets (sets of integers {A,B,C}
where A2 + B2 = C2
):
pythag(N) -> [ {A,B,C} || A <- lists:seq(1,N), B <- lists:seq(1,N), C <- lists:seq(1,N), A+B+C =< N, A*A+B*B =:= C*C ].
Ad infinitum into the wee hours of the morning...