Difference between revisions of "Combining pattern structure"
(Marked this version for translation) |
|||
Line 4: | Line 4: | ||
<!--T:2--> | <!--T:2--> | ||
− | A core feature of Tidal is the ease in which two patterns can be combined. | + | A core feature of Tidal is the ease in which two patterns can be combined. |
+ | |||
+ | For example, these are two patterns being combined by adding together their elements: | ||
<!--T:3--> | <!--T:3--> | ||
Line 10: | Line 12: | ||
"2 3" + "4 5 6" | "2 3" + "4 5 6" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | The result of the above is equivalent to the pattern <syntaxhighlight lang = "Haskell" inline>"6 [7 8] 9"</syntaxhighlight>. But why? | ||
<!--T:4--> | <!--T:4--> | ||
− | The two patterns line up over time like this: | + | Lets look cloesr. The two patterns line up over time like this: |
<!--T:5--> | <!--T:5--> | ||
Line 21: | Line 25: | ||
<!--T:6--> | <!--T:6--> | ||
− | Unlike in previous versions of Tidal, by default the structure now comes from _both | + | Unlike in previous versions of Tidal, when you combine two patterns in this way, by default the structure now comes from _both patterns_. This means you end up with _four_ events, because the <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight> in the middle lines up both with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> and the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight>, and gets split in half between them. We can add the resulting pattern to our table: |
<!--T:7--> | <!--T:7--> | ||
Line 31: | Line 35: | ||
<!--T:8--> | <!--T:8--> | ||
− | You can see that the | + | You can see that the <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight> fits inside <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight>, so where they intersect, you get a new event equal to their sum <syntaxhighlight lang="Haskell" inline>6</syntaxhighlight>. |
− | |||
− | |||
− | |||
− | |||
<!--T:9--> | <!--T:9--> | ||
Also see that the event with value <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight> is cut in half, to create two, | 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 <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> event and the other half | shorter events. Half matches with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> event and the other half | ||
− | matches with the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> event | + | matches with the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> event. |
− | |||
<!--T:10--> | <!--T:10--> | ||
Line 50: | Line 49: | ||
<!--T:12--> | <!--T:12--> | ||
− | + | In previous versions of Tidal, the structure always came from the left. You can still do this, but in this case using <syntaxhighlight lang="Haskell" inline>|+`</syntaxhighlight>. | |
− | still do this, but in this case using <syntaxhighlight lang="Haskell" inline>|+`. | ||
<!--T:13--> | <!--T:13--> | ||
Line 62: | Line 60: | ||
<!--T:15--> | <!--T:15--> | ||
− | In the above example, you end up with structure from the first | + | In the above example, you end up with structure from the first (leftmost) pattern, like this: |
− | |||
<!--T:16--> | <!--T:16--> |
Revision as of 15:47, 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.
For example, these are two patterns being combined by adding together their elements:
"2 3" + "4 5 6"
The result of the above is equivalent to the pattern "6 [7 8] 9"
. But why?
Lets look cloesr. The two patterns line up over time like this:
| 2 | 3 | + | 4 | 5 | 6 |
Unlike in previous versions of Tidal, when you combine two patterns in this way, by default the structure now comes from _both patterns_. This means you end up with _four_ events, because the 5
in the middle lines up both with the 2
and the 3
, and gets split in half between them. We can add the resulting pattern to our table:
| 2 | 3 | + | 4 | 5 | 6 | = | 6 |7|8| 9 |
You can see that the 4
fits inside 2
, so where they intersect, you get a new event equal to their sum 6
.
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.
The fourth and final event comes from the intersection of 3
and 6
,
giving a value of 9
.
Structure from the left
In previous versions of Tidal, the structure always came from the left. You can still do this, but in this case using |+`
.
For example:
"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 | |+| (or + )
|
|+
|
+|
|
Subtract | |-| (or - )
|
|-
|
-|
|
Multiply | |*| (or * )
|
|*
|
*|
|
Divide | |/| (or / )
|
|/
|
/|
|
Modulo | |%|
|
|%
|
%|
|
Left values | |<|
|
|<
|
<|
|
Right values | |>|
|
|>
|
>|
|
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 | = | 4 | 5 |
This is very similar to how |+|
used to work in the versions of tidal prior to 1.0.0 - it took structure from the left, but values from the right. Accordingly and #
maintains this behaviour in the new tidal.