Difference between revisions of "Combining pattern structure"

From TidalCycles userbase
Jump to: navigation, search
Line 49: 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>.  
+
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>.  
  
 
<!--T:13-->
 
<!--T:13-->
Line 72: Line 72:
 
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
 
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 <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>
 
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 <syntaxhighlight lang="Haskell" inline>3+5=8</syntaxhighlight>.
+
and <syntaxhighlight lang="Haskell" inline>3+5=8</syntaxhighlight>. The result is the equivalent of <syntaxhighlight lang="Haskell" inline>"6 8"</syntaxhighlight>
  
 
== Structure from the right == <!--T:18-->
 
== Structure from the right == <!--T:18-->
Line 86: Line 86:
 
  = | 6 | 7 | 9 |
 
  = | 6 | 7 | 9 |
 
</pre>
 
</pre>
 +
 +
The result is the equivalent of <syntaxhighlight lang="Haskell" inline>"6 7 9"</syntaxhighlight>.
  
 
== All the operators == <!--T:21-->
 
== All the operators == <!--T:21-->
 +
 +
So far, we've just looked at
  
 
<!--T:22-->
 
<!--T:22-->
 
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
 
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, <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight> from the right, and <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight> or <syntaxhighlight lang="Haskell" inline>+</syntaxhighlight> for
 
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 the basic operators you can use to combine numerical patterns:
structure:
 
  
 
<!--T:23-->
 
<!--T:23-->
Line 151: Line 154:
  
 
<!--T:26-->
 
<!--T:26-->
This is very similar to how <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight> 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 <syntaxhighlight lang="Haskell" inline>#</syntaxhighlight> maintains this behaviour in the new tidal.
+
This is very similar to how <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight> used to work in the versions of tidal prior to 1.0.0 - it took structure from the left, but values from the right. In fact, <syntaxhighlight lang="Haskell" inline>#</syntaxhighlight> is an alias for <syntaxhighlight lang="Haskell" inline>|></syntaxhighlight>, mirroring the behaviour in previous versions of tidal.
 
</translate>
 
</translate>

Revision as of 15:57, 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. The result is the equivalent of "6 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 |

The result is the equivalent of "6 7 9".

All the operators

So far, we've just looked at

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 the basic operators you can use to combine numerical patterns:

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. In fact, # is an alias for |>, mirroring the behaviour in previous versions of tidal.