That's a harder question. Why do other people do the things they do? One reason might be because it was convenient for them to write (and debug) things that way.
But it is possible they are doing it for performance reasons, so maybe it's worth considering why it should be faster? That is to say, should the programmer assume the latter is faster than the former?
To do that, I would suggest putting yourself in the shoes of the implementor: You have a choice of how it should be implemented. Knowing this decision will affect every use of @[x;i;f], should it begin with an if statement like this?
if(y->n == 0)return x;
But before you answer, remember the next thing @[x;i;f]
needs to do, is consider if x has any additional references, because if it does, it has make a copy of x. That means there already
needs to be an if statement that looks like this:
if(x->r > 0) x = copy(x);
So one way to think about this, is to ask if you are implementing @[x;i;f], should you choose one branch or two?
$[#i:& XXX ; @[x;i;:[; YYY]]; x]
Also: Do you see the part that goes :[;YYY]? That's constructing an object. Do you think it is worth avoiding that allocation if possible?