Simplify a complex wthFilter-flatMap-map expression with a for expression

The result of this expression is exactly the same as the result of the
previous expression. What's more, most readers of the code would likely
find the for expression much clearer than the previous query, which used
the higher-order functions, map, flatMap, and withFilter.

However, the last two queries are not as dissimilar as it might seem.
In fact, it turns out that the Scala compiler will translate the second
query into the first one. More generally, all for expressions that yield
a result are translated by the compiler into combinations of invocations
of the higher-order methods map, flatMap, and withFilter. All for loops
without yield are translated into a smaller set of higher-order functions:
just withFilter and foreach.
Add more discussion about for expressions

Describe the form of for expressions and show two alternate syntaxes for
them: one with parentheses and semicolons and one with curly braces
without semicolons.
Add discussion about generators in for expressions
Add discussion of definitions in for expressions
Add discussion of filters in for expressions