Difference between revisions of "Combining pattern structure"
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>+  +  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  +  both. Here are the basic operators you can use to combine numerical patterns: 
−  
<!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.  +  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 78 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.