# Range expressions

The expression `E1 to E2`

returns a sequence of integers. For example, ```
1
to 5
```

returns the sequence `1, 2, 3, 4, 5`

. This is useful in
`for`

expressions, for example the first five nodes of a node sequence can be
processed by writing `for $i in 1 to 5 return (//x)[$i]`

.

If you prefer, you can write this as `(//x)[position() = 1 to 5]`

. This works
because comparison of a single integer (`position()`

) to a sequence of integers
(`1 to 5`

) is true if the integer on the left is equal to any integer in the
sequence.

Saxon does a good job of optimizing range expressions. For example given the expression
`$x = (1 to 1000000)`

, it won't actually compare `$x`

with every
integer in this range; rather, it tests that `$x`

is a whole number and that it
is greater than 0 and less than 1000001.