On 29-Mar-2012 03:20, David Brown wrote:
On 29/03/2012 00:52, mathog wrote:
A better solution for the aesthetics would have been (it is a bit
late
now) to implement the missing unary negation operator:
!!b; //T->F, F->T
You can't do that, because "!!" is already a useful operator on
integers - it turns anything non-zero into 1 while leaving 0 alone,
and is effectively an "int to bool" conversion operator.
Right, hence the "a bit late now".
(I'm going to use "unary operator" for the rest of this to mean
operations like ++, an operator that
changes the value of the operand all by itself. There is some other
technical term to distinguish that
from a unary "-", for instance, but I have long since forgotten what it
is.)
I understand we aren't likely to ever see !! as a unary operator
because of backwards
compatibility issues. Since unary not is an obvious thing to have
added to C99 along with
bool, my guess is that they couldn't figure a way to squeeze it in
without stepping on !!
or something else still needed for backwards compatibility.
This highlights the problem with defining unary operators by repetition
of single characters,
rather than by using a special symbol to indicate all of the unary
operators, something like
i@+ , i@- instead of i++, i--
+@i , -@i instead if ++i, --i
and so forth, which would have allowed for unary variants of more
operators. Including those not
considered at the time the language was first constructed. Here: !@b
and b@!, but also for
~, for instance. We are all used to "++" now, but if you think about
it
"add twice" is not a natural synonym for "increment", whereas
<var><unary operator symbol><plus> is.
Anyway, this ship sailed a long, long, long time ago.
Regards,
David Mathog
mat...@caltech.edu
Manager, Sequence Analysis Facility, Biology Division, Caltech