Re: BinaryWrite and Position in Mathematica 6
- To: mathgroup at smc.vnet.net
- Subject: [mg83319] Re: BinaryWrite and Position in Mathematica 6
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sat, 17 Nov 2007 05:27:13 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <fhjr8v$4ce$1@smc.vnet.net>
L. Dwynn Lafleur wrote:
> I do not understand the following results from Mathematica 6.0.1.0 running
> in Windows XP (SP2):
>
> In[1]:= a={{2}}
> Out[1]= {{2}}
>
> In[2]:= b=Position[{x,y,z},y]
> Out[2]= {{2}}
>
> In[3]:= a==b
> Out[3]= True
>
>
>>From the above results, we see that although they produced differently, a
> and b are apparently identical. Now I attempt to write each to a file using
> BinaryWrite:
>
> In[4]:= BinaryWrite["aFile.dat",a,"Integer32"]
> Out[4]= aFile.dat
>
> In[5]:= BinaryWrite["bFile.txt",b,"Integer32"]
> During evaluation of In[5]:= BinaryWrite::nocoerce: {2} cannot be
> coerced to the specified format. >>
> Out[5]= $Failed
>
> BinaryWrite writes a successfully, but fails on b. However, consider the
> following:
>
> In[6]:= BinaryWrite["bFile2.txt",ToExpression[b],"Integer32"]
> Out[6]= bFile2.txt
>
> Why do I need to convert b before writing it to a file? I thought that
> "a==b -> True" indicates a and b are identical and therefore should be
> treated in the same way by Mathematica. What am I overlooking?
Very puzzling, indeed. First, I thought that you might have a problem
with your environment. However, I did reproduce the same behaviors
without any difficulty on my system. Then, ...
Even SameQ (triple equal sign ===), which is a stronger test than Equal
(double equal sing ==), cannot find any difference. Comparing the full
form of each expression just reinforces the feeling that there exists no
difference. And I fail to see what ToExpression can possibly change (and
so does Mathematica, except BinaryWrite of course!). I hope someone else
will be able to shed some light.
In[1]:= a = {{2}}
Out[1]= {{2}}
In[2]:= b = Position[{x, y, z}, y]
Out[2]= {{2}}
In[3]:= a == b
Out[3]= True
In[4]:= a === b
Out[4]= True
In[5]:= FullForm[a]
Out[5]//FullForm= \!\(\*
TagBox[
StyleBox[
RowBox[{"List", "[",
RowBox[{"List", "[", "2", "]"}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\)
In[6]:= FullForm[b]
Out[6]//FullForm= \!\(\*
TagBox[
StyleBox[
RowBox[{"List", "[",
RowBox[{"List", "[", "2", "]"}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\)
In[7]:= OwnValues[a]
Out[7]= {HoldPattern[a] :> {{2}}}
In[8]:= OwnValues[b]
Out[8]= {HoldPattern[b] :> {{2}}}
In[9]:= ToExpression[b]
Out[9]= {{2}}
In[10]:= b === ToExpression[b]
Out[10]= True
In[11]:= BinaryWrite["aFile.dat", a, "Integer32"]
Out[11]= "aFile.dat"
In[12]:= BinaryWrite["bFile.dat", b, "Integer32"]
During evaluation of In[12]:= BinaryWrite::nocoerce: {2} cannot be \
coerced to the specified format. >>
Out[12]= $Failed
In[13]:= BinaryWrite["bFile2.txt", ToExpression[b], "Integer32"]
Out[13]= "bFile2.txt"
In[14]:= $Version
Out[14]= "6.0 for Microsoft Windows (32-bit) (June 19, 2007)"
Regards,
--
Jean-Marc