# Difference between revisions of "Combining pattern structure"

Line 22: | Line 22: | ||

</pre> | </pre> | ||

− | You can see that the event with the value of | + | You can see that the event with the value of <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight> fits in the event |

− | with value of | + | with value of <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight>, so you get a new event equalling their sum <syntaxhighlight lang="Haskell" inline>6</syntaxhighlight>. You |

can see that the onset and duration is the interection, which in this | can see that the onset and duration is the interection, which in this | ||

case is just the onset and duration of the original event with the | case is just the onset and duration of the original event with the | ||

− | value | + | value <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight>. |

− | Also see that the event with value | + | Also see that the event with value <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight> is cut in half, to create two, |

− | shorter events. Half matches with the | + | shorter events. Half matches with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> event and the other half |

− | matches with the | + | matches with the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> event. Again, the onset and duration of both |

events comes from the intersections. | events comes from the intersections. | ||

− | The fourth and final event comes from the intersection of | + | The fourth and final event comes from the intersection of <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> and <syntaxhighlight lang="Haskell" inline>6</syntaxhighlight>, |

− | giving a value of | + | giving a value of <syntaxhighlight lang="Haskell" inline>9</syntaxhighlight>. |

## Structure from the left | ## Structure from the left | ||

The old behaviour was to take the structure from the left. You can | The old behaviour was to take the structure from the left. You can | ||

− | still do this, but in this case using | + | still do this, but in this case using <syntaxhighlight lang="Haskell" inline>|+`. |

For example: | For example: | ||

− | + | <syntaxhighlight lang="Haskell"> | |

"2 3" |+ "4 5 6" | "2 3" |+ "4 5 6" | ||

− | + | </syntaxhighlight> | |

In the above example, you end up with structure from the first, leftmost pattern, like this: | In the above example, you end up with structure from the first, leftmost pattern, like this: | ||

− | + | <pre> | |

| 2 | 3 | | | 2 | 3 | | ||

|+ | 4 | 5 | 6 | | |+ | 4 | 5 | 6 | | ||

= | 6 | 8 | | = | 6 | 8 | | ||

− | + | </pre> | |

− | You can see the structure comes from the | + | You can see the structure comes from the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> and <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight>. <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> lines up |

− | with | + | with <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight>, and the start of <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> is in <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight>, so you end up with <syntaxhighlight lang="Haskell" inline>2+4=6</syntaxhighlight> |

− | and | + | and <syntaxhighlight lang="Haskell" inline>3+5=8</syntaxhighlight>. |

## Structure from the right | ## Structure from the right | ||

− | Likewise, you can take the structure from the right, with | + | Likewise, you can take the structure from the right, with <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight>. So <syntaxhighlight lang="Haskell" inline>"2 |

− | 3" +| "4 5 6" | + | 3" +| "4 5 6"</syntaxhighlight> looks like: |

− | + | <pre> | |

| 2 | 3 | | | 2 | 3 | | ||

+| | 4 | 5 | 6 | | +| | 4 | 5 | 6 | | ||

= | 6 | 7 | 9 | | = | 6 | 7 | 9 | | ||

− | + | </pre> | |

## All the operators | ## All the operators | ||

− | Note that | + | Note that <syntaxhighlight lang="Haskell" inline>+</syntaxhighlight> is actually an alias for <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight>. So <syntaxhighlight lang="Haskell" inline>|+</syntaxhighlight> is to take the |

− | structure from the left, | + | structure from the left, <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight> from the right, and <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight> or <syntaxhighlight lang="Haskell" inline>+</syntaxhighlight> for |

both. Here are all the basic operators you can use to combine | both. Here are all the basic operators you can use to combine | ||

structure: | structure: | ||

Line 80: | Line 80: | ||

Function Both Left Right | Function Both Left Right | ||

-------- --------- ----- ------ | -------- --------- ----- ------ | ||

− | Add | + | Add <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight>/</syntaxhighlight>+</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|+</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight> |

− | Multiply | + | Multiply <syntaxhighlight lang="Haskell" inline>|*|</syntaxhighlight>/</syntaxhighlight>*</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|*</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>*|</syntaxhighlight> |

− | Subtract | + | Subtract <syntaxhighlight lang="Haskell" inline>|-|</syntaxhighlight>/</syntaxhighlight>-</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|-</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>-|</syntaxhighlight> |

− | Divide | + | Divide <syntaxhighlight lang="Haskell" inline>|/|</syntaxhighlight>/</syntaxhighlight>/</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|/</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>/|</syntaxhighlight> |

− | Modulo | + | Modulo <syntaxhighlight lang="Haskell" inline>|%|</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|%</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>%|</syntaxhighlight> |

− | Left values | + | Left values <syntaxhighlight lang="Haskell" inline>|<|</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|<</syntaxhighlight> <syntaxhighlight lang="Haskell" inline><|</syntaxhighlight> |

− | Right values | + | Right values <syntaxhighlight lang="Haskell" inline>|>|</syntaxhighlight>/</syntaxhighlight>#</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|></syntaxhighlight> <syntaxhighlight lang="Haskell" inline>>|</syntaxhighlight> |

The last two are interesting, they let you only take values from one | The last two are interesting, they let you only take values from one | ||

side. So for example you could take structure from the left, but | side. So for example you could take structure from the left, but | ||

− | values from the right with | + | values from the right with <syntaxhighlight lang="Haskell" inline>|></syntaxhighlight>, for example: |

− | + | <pre> | |

| 2 | 3 | | | 2 | 3 | | ||

|> | 4 | 5 | 6 | | |> | 4 | 5 | 6 | | ||

= | 2 | 9 | | = | 2 | 9 | | ||

− | + | </pre> | |

− | This is actually how | + | This is actually how <syntaxhighlight lang="Haskell" inline>#</syntaxhighlight> works in the current tidal. |

## Revision as of 13:38, 7 November 2018

**This does not describe current behaviour - this is upcoming in version 1.0.0.**

A core feature of Tidal is the ease in which two patterns can be combined. This is changing a lot in the upcoming 1.0.0 version of Tidal. For example, these are two patterns being combined by adding together their elements:

```
"2 3" + "4 5 6"
```

The two patterns line up over time like this:

| 2 | 3 | + | 4 | 5 | 6 |

Unlike in previous versions of Tidal, by default the structure now comes from _both sides_. This means you end up with _four_ events, because the 5 lines up both with the `2`

and the `3`

. So the result is equivalent to `"6 [7 8] 9"`

:

| 2 | 3 | + | 4 | 5 | 6 | = | 6 |7|8| 9 |

You can see that the event with the value of `4`

fits in the event
with value of `2`

, so you get a new event equalling their sum `6`

. You
can see that the onset and duration is the interection, which in this
case is just the onset and duration of the original event with the
value `4`

.

Also see that the event with value `5`

is cut in half, to create two,
shorter events. Half matches with the `2`

event and the other half
matches with the `3`

event. Again, the onset and duration of both
events comes from the intersections.

The fourth and final event comes from the intersection of `3`

and `6`

,
giving a value of `9`

.

- Structure from the left

The old behaviour was to take the structure from the left. You can
still do this, but in this case using `|+`. For example: <syntaxhighlight lang="Haskell"> "2 3" |+ "4 5 6"`

In the above example, you end up with structure from the first, leftmost pattern, like this:

| 2 | 3 | |+ | 4 | 5 | 6 | = | 6 | 8 |

You can see the structure comes from the `2`

and `3`

. `2`

lines up
with `4`

, and the start of `3`

is in `5`

, so you end up with `2+4=6`

and `3+5=8`

.

- Structure from the right

Likewise, you can take the structure from the right, with `+|`

. So `"2 3" +| "4 5 6"`

looks like:

| 2 | 3 | +| | 4 | 5 | 6 | = | 6 | 7 | 9 |

- All the operators

Note that `+`

is actually an alias for `|+|`

. So `|+`

is to take the
structure from the left, `+|`

from the right, and `|+|`

or `+`

for
both. Here are all the basic operators you can use to combine
structure:

Function Both Left Right

--------- ----- ------

Add `|+|`

/</syntaxhighlight>+</syntaxhighlight> `|+`

`+|`

Multiply `|*|`

/</syntaxhighlight>*</syntaxhighlight> `|*`

`*|`

Subtract `|-|`

/</syntaxhighlight>-</syntaxhighlight> `|-`

`-|`

Divide `|/|`

/</syntaxhighlight>/</syntaxhighlight> `|/`

`/|`

Modulo `|%|`

`|%`

`%|`

Left values `|<|`

`|<`

`<|`

Right values `|>|`

/</syntaxhighlight>#</syntaxhighlight> `|>`

`>|`

The last two are interesting, they let you only take values from one
side. So for example you could take structure from the left, but
values from the right with `|>`

, for example:

| 2 | 3 | |> | 4 | 5 | 6 | = | 2 | 9 |

This is actually how `#`

works in the current tidal.