I thought that

        op = _,_;

should be equivalent to

        op(x1,x2) = x1,x2;

and since inputs(op) == 2 all these definitions

        process = op;
        process = op(_);
        process = op(_,_);
        process = op(_)(_);

should be equivalent and result in

        output0[i] = FAUSTFLOAT(float(input0[i]));
        output1[i] = FAUSTFLOAT(float(input1[i]));

This is almost true, but there is one exception:

        op(x1,x2) = x1,x2;
        process = op(_);

acts as cross2 and compiles to

        output0[i] = FAUSTFLOAT(float(input1[i]));
        output1[i] = FAUSTFLOAT(float(input0[i]));

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

Perhaps I can even understand this... so if we have

        op(x1,x2) = x1,x2;
        process = op(_);

then op(_) "returns" \(x2).(_,x2) after transformation and then

        process = \(x2).(_,x2);

"binds" the 1st input to x2. Right?


OK, but why this doesn't happen with builtin primitives? Say,

        process = /(_);

compiles to "input0[i] / input1[i]" as expected... OK, this is probably
because

        /(2)(3)
        /(2, 3)

are NOT the same thing as I'd expect. It seems there are some special rules
for builtin operators?

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

Is there any documentation which explains these subtlenesses?

Thanks,

Oleg.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to