On 06/27, Yann Orlarey wrote:
>
> The current implementation of letrec is extremely simple and
> almost like syntactic sugar,

Yes, but I'm afraid it is only simple to you and other faust devs ;)

Once I was greatly puzzled why letrec doesn't work as I'd expect, and
I had to dig into the compiler sources to understand.

For example, I think it is not immediately clear why this code

        process = _ : bug;

        bug = x,y letrec {
                'x = _;
                'y = 0;
        };

doesn't even compile. IIUC, this is because buildRecursiveBodyDef() turns
the code above into something like

        LETRECBODY = \(x, y).( ... ) ~ (_,_);
        // makeRecProjectionsList()
        x = LETRECBODY : _,!;
        y = LETRECBODY : !,_;

Perhaps letrec needs more documentation? In particular, the doc could
explain that yes, it is just syntactic sugar, and you can always avoid it.

And I recall I have already asked this question, but nobody replied. See

        https://sourceforge.net/p/faudiostream/mailman/message/36587927/

and this reminds me that I'd really like to have a better way to name the
outputs ;)

Oleg.



_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to