The Math Forum

Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Math Forum » Discussions » Inactive » comp.soft-sys.math.mathematica

Topic: BitAnd[True,False]
Replies: 6   Last Post: Sep 27, 2013 2:37 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
Sseziwa Mukasa

Posts: 108
Registered: 8/26/07
Re: BitAnd[True,False]
Posted: Sep 26, 2013 3:45 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

On Sep 25, 2013, at 2:36 AM, Alan <> wrote:

> I'd hoped BitAnd would work on Boolean Lists so I gave it a try. If it had simply failed completely I'd be disappointed but would understand. But oddly, it half succeeds. Why? BitOr fails the same way, and BitNot always fails.
> I just want to understand these results. I know there are ways to get the output I want.
> Thanks,
> Alan Isaac
> (using Mathematica 9)
> In[77]:= BooleanTable[{p,q,BitAnd[p,q]},{p,q}]//TableForm
> Out[77]//TableForm=
> True True True
> True False BitAnd[False,True]
> False True BitAnd[False,True]
> False False False

There's a lot going on here.

To start with BooleanTable[expr,p,q] evaluates the truth value of expr, but {p,q,BitAnd[p,q]} is not a Boolean function and has no truth value. But BooleanTable's implementation is strange, it's actually written in Mathematica itself, try

Trace[BooleanTable[{stuff}, stuff]]

for example. The upshot of all this is rather than returning BooleanTable[expr,p,q] as most other functions that can't evaluate their arguments BooleanTable[{p,q},p,q] returns the expression with the variables replaced by True or False. Similarly consider:

(Debug) In[21]:= BooleanTable[expr, p, q]
(Debug) Out[21]= {{expr, expr}, {expr, expr}}

So anyway that's a long winded way of saying BooleanTable's result is already a truth table but the values of the arguments to its first argument are implied and if you want to make a table with columns for the arguments you have to use a different method.

As for the behavior of BitAnd. First of all it simplifies its arguments so BitAnd[x,x] evaluates to BitAnd[x]:

(Debug) In[52]:= tRACe[BitAnd[x,x]]
(Debug) Out[52]= {BitAnd[x,x],BitAnd[x],x}

Then BitAnd has the property OneIdentity so BitAnd[x] evaluates to x. Thus BitAnd[True,True]->True. This has the amusing side effect of meaning BitAnd sometimes will appear to evaluate for arguments of the wrong type, but BitAnd[True,False] is undefined since True and False are not integers which is what BitAnd expects for arguments. The Orderless attribute results in BitAnd[True,False]->BitAnd[False,True].


Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© The Math Forum at NCTM 1994-2017. All Rights Reserved.