[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
BOOLE of one (i.e. two) argument
- To: (BUG lisp) at MIT-MC
- Subject: BOOLE of one (i.e. two) argument
- From: GLS at MIT-AI (Guy L. Steele, Jr.)
- Date: Mon, 4 Aug 80 18:57:00 GMT
- Cc: (BUG LISPM) at MIT-AI, GLS at MIT-AI
- Original-date: 4 AUG 1980 1457-EDT
I argue that (BOOLE 10 X) should in fact return X, not (LOGNOT X).
The reasoning is that for these multiple-argument operators
like BOOLE, PLUS, TIMES, MAX, and so on, we want the following
property to hold:
(OP (OP x1 x2 ... xj) xj+1 ... xn)
= (OP x1 x2 ... xj xj+1 ... xn)
for as many j and n as possible. Indeed, for j=2 this is how
these operations are implemented.
Now if you let j=1 you can see that the result of (OP x) should be x,
and for j=0 the result of (OP) should be the identity operation for
OP if it has one (this is why (PLUS)=0 and (TIMES)=1).
To avoid problems BOOLE requires at least one real argument (in addition
to the opreator number), because some operator numbers have identities
and others do not.
Now I suppose that one could argue that (BOOLE 10 X) = (LOGNOT X)
by analogy with (- x) = (MINUS x), but that is after all
a crock special case allowed because the single-argument
case is otherwise "useless". However, I think the above-cited
property is useful enough to warrant the (BOOLE 10 X)=X.