[net.lang.c] No more logical XOR

brian@digi-g.UUCP (Merlyn Leroy <Brian Westley>) (11/27/84)

<find the bug in this picture>

OK, since hardly anybody seemed to like my idea of logical XOR (^^),
and wanted me to use !a!=!b instead of a^^b, I have another proposal;
replace all operators with NAND ops!  This new operator ($ for bitwise,
$$ for logical) can replace nearly everything, vis;

a & b  -->  (a $ b) $ (a $ b)
a | b  -->  (a $ a) $ (b $ b)
a ^ b  -->  ((a $ a) $ b) $ (a $ (b $ b))
~a     -->  (a $ a)
a && b -->  (a $$ b) $$ (a $$ b)
a || b -->  (a $$ a) $$ (b $$ b)
a ^^ b -->  ((a $$ a) $$ b) $$ (a $$ (b $$ b))	[I never give up]
!a     -->  (a $$ a)
a == b -->  (((a $ a) $ b) $ (a $ (b $ b))) $$ (((a $ a) $ b) $ (a $ (b $ b)))
a != b -->  ((a $ b) $ ((a $ a) $ (b $ b))) $$ ((a $ b) $ ((a $ a) $ (b $ b)))
e?a:b  -->  (((e $$ e)-1) $ a) $ ((((e $$ e) $$ (e $$ e))-1) $ b)

(the last three operators don't work with floats, but REAL programmers don't
need floats)

Now we can get rid of those extra operators, like & | ^ ~ && || ! == != and ?:
and replace them with one (well, two) simple operators.  Ideally, this would be
implemented on a computer built entirely of NOR gates.

Notice how this simplifies expressions:
if (!a || (b == c))
	becomes:
if (((a $$ a) $$ (a $$ a)) $$
    ((((b $ b) $ c) $ (b $ (c $ c))) $$ (((b $ b) $ c) $ (b $ (c $ c))) $$
     (((b $ b) $ c) $ (b $ (c $ c))) $$ (((b $ b) $ c) $ (b $ (c $ c)))))

Next week:  Replacing +-*/%++ with --

							Merlyn Leroy

P.S.  The ":-)" operator can be replaced by ((:$-) $$ (: $ :) $ (-$$-))