Re: StringJoin with ToString

*To*: mathgroup at smc.vnet.net*Subject*: [mg98314] Re: StringJoin with ToString*From*: ADL <alberto.dilullo at tiscali.it>*Date*: Sun, 5 Apr 2009 06:40:44 -0400 (EDT)*References*: <gr6cbs$pva$1@smc.vnet.net>

With the following definitions, your idea appears to work (at least in a few examples I tested): ClearAll[toString]; toString[x_?NumericQ, format___] := ToString[x, format]; toString[x_[y__], format___] := x @@ (toString /@ {y}); toString[x_Symbol, format___] := ToString[x, format]; toString[x_, format___] := x; Unprotect[System`StringJoin]; Unprotect[$UseNewStringJoin]; $UseNewStringJoin = True; System`StringJoin[expr___] := Block[{$UseNewStringJoin = False}, StringJoin @@ (toString /@ {expr})] /; TrueQ[$UseNewStringJoin]; Protect[$UseNewStringJoin]; Protect[System`StringJoin]; The problem was the way ToString works, which is incompatible with intermediate formatting functions. The definition of "toString" does the job. In[12]:= StringJoin[{1, 2, 3}] // InputForm Out[12]//InputForm= "123" In[13]:= StringJoin[1, a, 3] // InputForm Out[13]//InputForm= "1a3" In[17]:= StringJoin[1, "2", \[Pi]] // InputForm Out[17]//InputForm= "12Pi" In[15]:= Append[dummy, 2] During evaluation of In[15]:= Append::normal: Nonatomic expression expected at position 1 in Append[dummy,2]. >> Out[15]= Append[dummy,2] ADL On 4 Apr, 03:15, replicator... at gmail.com wrote: > It is quite interesting why StringJoin does not apply ToString to > those arguments which are non-string. I've overridden the built-in > StringJoin, to save a few unnecessary ToStrings by the standard method > (the context specifications are necessary for packaging): > ... > > Thanks > > Istvan Zachar