On 5/6/05, Brent 'Dax' Royal-Gordon <[EMAIL PROTECTED]> wrote: > I find this table very interesting, in that it shows the fundamental > difference between reduce and the existing meta-ops.
Yep, that was basically the whole point of the table. > The existing meta-operators alter the semantics of the opoerator, but > don't really change its syntax; a unary operator is still unary, a > binary operator is still binary, and so on. Reduce is irreducibly > (pardon the pun) different, in that it alters the syntax as well as > the semantics. I was thinking of restricting the ways in which meta-ops can alter the syntax of an op, but now I think we're better off not letting it happen at all. Meta-ops that redefine syntax would be very hairy for the compiler (as I pointed out), and probably wouldn't buy us much that you couldn't achieve with a macro anyway. > That would result in the following syntaxes: > > reduce { $^a / $^b } @foo; > reduce [/] @foo; > > $sum = reduce[+] @array; > $fact = reduce[*] 1..$num; > $firsttrue = reduce[||] @args; > $firstdef = reduce[//] @args; > @sumrows := reduce[+«] @rows; > @foo[0..9; reduce[;](@dims); 0..9] I personally like that, and it has the additional property of avoiding the "[+] @foo" vs. "[+1, -2]" ambiguity I pointed out. Furthermore, it makes it /much/ easier for newbies to figure out what that code actually does (since they can just grep for 'reduce' in the docs). Stuart