List Comprehensions

Tony supports list comprehensions, posing an alternative to recursion and higher-order functions like map when implementing loops.

Say, we want to add 1 to each number from 1 to 3:

+ := (a, b) => eval('{a} + {b}')
# returns [2, 3, 4]
[x + 1 | x in [1, 2, 3]]

A list conprehension in Tony consists of an evaluated expression and a list of generators. A generator represents a variable taking one values in a list. A generator may also include a condition:

+ := (a, b) => eval('{a} + {b}')
< := (a, b) => eval('{a} < {b}')
# returns [2, 3]
[x + 1 | x in [1, 2, 3] if x < 3]

A two dimensional list comprehension would look like this:

+ := (a, b) => eval('{a} + {b}')
# returns [5, 6, 6, 7, 7, 8]
[x + y | x in [1, 2, 3], y in [4, 5]]