Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2001

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

Search the Archive

Re: Problem overriding simple built-in functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg28834] Re: Problem overriding simple built-in functions
  • From: Jean-Christophe Deschamps <jchd at worldnet.fr>
  • Date: Tue, 15 May 2001 00:59:05 -0400 (EDT)
  • References: <9dnr16$stj@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com


Thanks to those who took the pain to answer, pointing out that due the
Listable attribute of GCD, the behavior was not surprising.
I must admit my sloppiness in somehow making up the example in my previous
post, living out many details like that. The corrected example below is more
explicit about my question. I still must be missing something obvious, but I
fail to see what.



In[1]:=
Unprotect[GCD]

Out[1]=
{"GCD"}

In[2]:=
ClearAttributes[GCD, Listable]

In[3]:=
GCD[v_?VectorQ] := Apply[GCD, v]

In[4]:=
?? GCD

"GCD[n1, n2, ... ] gives the greatest common divisor of the integers ni."

\!\(\*
  InterpretationBox[GridBox[{
        {\(Attributes[GCD] = {Flat, Orderless}\)},
        {" "},
        {GridBox[{
              {\(GCD[v_?VectorQ] := GCD @@ v\)}
              },
            GridBaseline->{Baseline, {1, 1}},
            ColumnWidths->0.999,
            ColumnAlignments->{Left}]}
        },
      GridBaseline->{Baseline, {1, 1}},
      ColumnAlignments->{Left}],
    Definition[ GCD],
    Editable->False]\)

In[5]:=
v = {2, 4};
VectorQ[v]

Out[6]=
True

In[7]:=
GCD[v]

$RecursionLimit::"reclim": "Recursion depth of \!\(256\) exceeded."

Out[7]=
GCD[{2, 4}]

In[8]:=
Apply[GCD, v]

$RecursionLimit::"reclim": "Recursion depth of \!\(256\) exceeded."

$RecursionLimit::"reclim": "Recursion depth of \!\(256\) exceeded."

$RecursionLimit::"reclim": "Recursion depth of \!\(256\) exceeded."

General::"stop": "Further output of \!\($RecursionLimit :: \"reclim\"\) will
\
be suppressed during this calculation."

Out[8]=
2


The answer finally pops up, but why the recursion? [Trace-ing of this has
been left off here to conserve space.]

LCM behaves as GCD in Mathematica 4.


|> Consequently, define your own function in these circumstances

No problem in this case: the scope of this code is very strictly limited and
not any kind of a general setup.

I was just wondering which new internal mecanism has been thrown in, that
causes my own previous code to break pityfully. I believe it's worth
understanding precisely why, in such a simple case, so as to benefit of the
introduced goodies in possibly more subtle contexts where it might prove
useful.

JcD


  • Prev by Date: Re: Det[]
  • Next by Date: Re: Problem overriding simple built-in functions
  • Previous by thread: Re: Re: Problem overriding simple built-in functions
  • Next by thread: Re: Problem overriding simple built-in functions