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