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

*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.

- Prev by Date:
**SHARAB and depurify first arg to suspend** - Next by Date:
**IGNORE** - Previous by thread:
**SHARAB and depurify first arg to suspend** - Next by thread:
**BOOLE of one (i.e. two) argument** - Index(es):