Luke Palmer wrote:
For something like:
$ordered = [<] @array;
If @array is empty, is $ordered supposed to be true or false? It
certainly shouldn't be anything but those two, because < is a boolean
operator.
I have no problem with 3-state logic systems (true, false, undef) if
this is what is required to let me choose the corner-case behavior.
Damian previously wrote:
> 2+ args: interpolate specified operator
> 1 arg: return that arg
> 0 args: fail (thrown or unthrown exception depending on use fatal)
The 1-arg case doesn't seem to work right with the [<] operator:
? [<] 1
? [<] 0
If the [<] is taken to mean "ordered", then it doesn't seem right that
these two tests would give different results. In this case, I need to
special case both the 0-arg and 1-arg scenarios. We either need to hard
code these special-cases into perl (belch), or we need to make it easy
to code both special-cases inline in the code, or we need a better
general-case rule.
One approach might be to reverse the direction of the definitions. That
is, instead of defining the binary form and then autogeneralizing in
terms of "join", we might define operators in terms of thier reduction
behavior, and then autospecialize to the binary case. Of course, that
still doesn't help for Damian's "product Vs factorial" example for the
0-arg case.
Or we take the well trodden road of ignoring mathematical correctness
and simply state "this is what perl does: take it or leave it".