# Parameters

does this change affect me?

If you use Cylc parameters with negative offsets (e.g. `foo<x-1>`

).

## Overview

There has been a subtle change in the way negative offsets are handled in parameters.

## Example

If you have a parameter `x`

with the values 1, 2 & 3:

```
[task parameters]
x = 1..3
```

And use it like so:

```
a<x-1> => b<x> => c<x>
```

There is some ambiguity about how this should be interpreted when `x=1`

because `<x-1>`

would be `0`

which is not a valid value for the parameter
`x`

.

Cylc 7 removed the part of the expression which was out of range resulting in a partial evaluation of that line:

```
b_x1 => c_x1 # x=1
a_x1 => b_x2 => c_x2 # x=2
a_x2 => b_x3 => c_x3 # x=3
```

Whereas Cylc 8 will remove everything after the first out-of-range parameter - `<x-1>`

(so the entire line for this example):

```
a_x1 => b_x2 => c_x2 # x=2
a_x2 => b_x2 => c_x2 # x=3
```

## Migration

If your workflow depends on the Cylc 7 behaviour, then the solution is to break the expression into two parts which Cylc will then evaluate separately.

```
- a<x-1> => b<x> => c<x>
+ a<x-1> => b<x>
+ b<x> => c<x>
```

Resulting in:

```
# a<x-1> => b<x>
a_x1 => a_x2 # x=2
a_x2 => a_x3 # x=3
# b<x> => c<x>
b_x1 => c_x1 # x=1
b_x2 => c_x2 # x=2
b_x3 => c_x3 # x=3
```

## Line Breaks

Note that these expressions are all equivalent:

```
a<x-1> => b<x> => c<x>
``` |
```
a<x-1> =>
b<x> =>
c<x>
``` |
```
a<x-1> => b<x> => \
c<x>
``` |