MathGroup Archive 2003

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

Search the Archive

Re: Redefine[Plus] - problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg41134] Re: Redefine[Plus] - problem
  • From: bobhanlon at aol.com (Bob Hanlon)
  • Date: Mon, 5 May 2003 02:40:55 -0400 (EDT)
  • References: <b92ha1$li0$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

I do not know the cause of the timing difference other than that you modified
the definition of Plus.  It is generally a bad idea to modify a built-in
function.  Rather than modify Plus, set UpValues of fc using TagSet.

Clear[fc];
fc /: fc[x_]+fc[y_]:=fc[x+y];
fc /: k_?NumericQ + fc[x_] := fc[k+x];


Bob Hanlon

In article <b92ha1$li0$1 at smc.vnet.net>, Petr Kujan <kujanp at fel.cvut.cz> wrote:

<< 
Subject:	Redefine[Plus] - problem
From:		Petr Kujan <kujanp at fel.cvut.cz>
To: mathgroup at smc.vnet.net
Date:		Sun, 4 May 2003 08:00:01 +0000 (UTC)

Hello all,

I would be grateful if someone could explain the difference in
time consummation.

I need redefine standard function Plus[] for function fc[]:

	Unprotect[Plus];
	Plus[a : fc[x_], b : fc[y_]] := fc[x + y]
	Plus[k : _?NumericQ, b : fc[y_]] := fc[k + y]
	Protect[Plus];


Now easy computation is very slow (time consummation is exponential!):

	dat = Table[s, {20}];
	Plus @@ dat // Timing

	{20.019 Second, 20 s}


But if the symbol s replace by x only:

	dat = Table[x, {20}];
	Plus @@ dat // Timing
	
	{0. Second, 20 x}

 >><BR><BR>


  • Prev by Date: RE: Problem about expression
  • Next by Date: WebMathematica and the Palm handheld
  • Previous by thread: Re: Transpose[A]*A wrong?
  • Next by thread: Re: Redefine[Plus] - problem