MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Overloading StringJoin

  • To: mathgroup at
  • Subject: [mg109797] Re: Overloading StringJoin
  • From: David Bailey <dave at>
  • Date: Tue, 18 May 2010 02:01:53 -0400 (EDT)
  • References: <hsr8al$bev$>

Mark Adler wrote:
> I use Join enough that I like to overload StringJoin to do it:
> Unprotect[StringJoin];
> x_List <> y_List := x~Join~y
> Protect[StringJoin];
> Then I can do this:
> {1, 2} <> {3, 4}
> {1, 2, 3, 4}
> Why doesn't Mathematica already do this?  It seem like an obvious use
> of <>.  Or is there a good reason that they don't do this, and
> therefore if I do, it makes me a bad person?
> Mark
Well it might make you unwise, though not bad :) I do occasionally 
Unprotect built-in symbols, but I always ask myself first if there is an 
easier way to achieve the same thing! The general problems associated 
with doing this are:

1) The function you modify may get used within other code (including 
within other built-in functions) and cause confusion.

2)  It is very hard for others to read your code if the built-in 
operations don't do what they should.

3)  I suspect at least some functions may not behave consistently if 
augmented in this way.

String and structural operations are separated in Mathematica, and on 
the whole this makes code easier to read because you don't have to ask 
yourself if the arguments to StringJoin are meant to be strings or not!

I guess what you really want is an operator to join lists - so why not 
overload an otherwise unused binary operator - like 
\[ReverseEquilibrium] to perform this task?

BTW, you can always make yourself a palette (or change the Mathematica 
menu) of special characters for easy insertion.

David Bailey

  • Prev by Date: Re: Random number generation( b/w two limits) with a
  • Next by Date: Re: Latex, Mathematica, and journals
  • Previous by thread: Re: Overloading StringJoin
  • Next by thread: Re: Overloading StringJoin