[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

BOOLE of one (i.e. two) argument



CC: (BUG LISPM) at MIT-AI, GLS at MIT-AI

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.