Deborah Pickett wrote:

You are going to see empty lists more often than you think in expressions like $product = [*] @array; and having to write that as $product = [*] 1, @array;just to protect against a common case doesn't exactly flaunt Perl's DWIMmeryto me. I *have* to write 1 there, or otherwise the reduce meta-operatorisn't calculating the product when there are items in @array. This hardlymakes sense from a Huffman perspective. Someone please convince meotherwise.

`The problem is that writing 1 there is still wrong in the "no arguments" case.`

`The product of zero numbers cannot possibly be one in any common sense`

`interpretation. (And, yes, I'm perfectly well aware of the mathematical`

`interpretations in which it does make sense...that's not the point.)`

What you want is: $product = ([*] @values err 0); Or: $factorial = ([*] 1..$n err 1);

`So what you want is not an identity value as default (which isn't even`

`possible for many operators, as Luke pointed out), but a predictable failure`

`value as default, so you can intercept that failure and choose your own`

`outcome in the edge case.`

Damian