On 5/25/20, Yann Orlarey <[email protected]> wrote:
> Following the recent exchanges, I would like to bring some clarifications
> on pattern matching and lists in Faust.
>
> Strictly speaking, there are no lists in Faust. For example the expression
> `()` or `NIL` in Lisp, which indicates an empty list, does not exist in
> Faust. Similarly, the distinction in Lisp between the number `3` and the
> list with only one element `(3)` does not exist in Faust.
>
> However, list operations can be simulated (in part) using the parallel
> binary composition operation `,` and pattern matching. The parallel
> composition operation is right-associative. This means that the expression
> `(1,2,3,4)` is just a simplified form of the fully parenthesized expression
> `(1,(2,(3,4)))`. The same is true for `(1,2,(3,4))` which is also a
> simplified form of the same fully parenthesized expression `(1,(2,(3,4)))`.
>
> You can think of pattern-matching as always being done on fully
> parenthesized expressions. Therefore no Faust function can ever distinguish
> `(1,2,3,4)` from `(1,2,(3,4))`, because they represent the same fully
> parenthesized expression `(1,(2,(3,4)))`.
>
> This is why `ba.count( ((1,2), (3,4), (5,6)) )` is not 3 but 4, and also
> why `ba.count( ( (1,2), ((3,4),5,6) ) )` is not 2 but 4.
>
> # Explanation:
>
> In both cases the fully parenthesized expression is
> `((1,2),((3,4),(5,6)))`. The definition of ba.count being:
>
>     count( (x,y) ) = 1 + count(y);  // rule R1
>     count(   x   ) = 1;             // rule R2
>
> we have:
>
>             ba.count( ((1,2),((3,4),(5,6))) )
>     -R1->   1 + ba.count( ((3,4),(5,6)) )
>     -R1->   1 + 1 +  ba.count( (5,6) )
>     -R1->   1 + 1 + 1 + ba.count( 6 )
>     -R2->   1 + 1 + 1 + 1
>
> Please note that pattern matching is not limited to parallel composition,
> the other composition operators (<:  : :> ~) can be used too.
>
> Yann
>
>
> *Yann Orlarey*
> Directeur scientifique/Scientific director
>
>
> [email protected] <[email protected]> T : +33 (0) 4 72 07 37 00
> GRAME - Centre national de création musicale
> 11 cours de Verdun Gensoul | 69002 Lyon
> www.grame.fr | facebook <https://www.facebook.com/Gramelyon/> | instagram
> <https://www.instagram.com/grame_cncm/> | twitter
> <https://twitter.com/GRAME_LYON>
>

Thanks.

This, and the previous discussion, were helpful in shedding light on
an aspect of faust on which the docs are somewhat unclear.


_______________________________________________
Faudiostream-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to