Re: A new symbol to "inherit" the definitions from an existing symbol?
- To: mathgroup at smc.vnet.net
- Subject: [mg17514] Re: [mg17464] A new symbol to "inherit" the definitions from an existing symbol?
- From: "Andrzej Kozlowski" <andrzej at tuins.ac.jp>
- Date: Mon, 10 May 1999 19:53:19 -0400
- Sender: owner-wri-mathgroup at wolfram.com
I have not given this much thought and maybe I have not understood you but
it seems to me this is pretty easy. Just define a clone funtion:
clone[h_,k_]:=(OwnValues[k]=OwnValues[h]/.h->k;
DownValues[k]=DownValues[h]/.h->k;UpValues[k]=UpValues[h]/.h->k;
SubValues[k]=SubValues[h]/.h->k;NValues[k]=NValues[h]/.h->k;
Attributes[k]=Attributes[h])
Now, suppose we start have a weird function f with the following rules:
In[1]:=
SetAttributes[f,Listable];L[f]^=Log[f];f/:f[x_][y_]:=f[x]+y;
f[x_*y_]:=f[x]*f[y]
Thus
In[2]:=
FullDefinition[f]
Out[2]=
Attributes[f] = {Listable}
f[x_][y_] := f[x] + y
L[f] ^= Log[f]
f[(x_) (y_)] := f[x] f[y]
Now we clone it:
In[3]:=
clone[f,g];
In[4]:=
FullDefinition[g]
Out[4]=
Attributes[g] = {Listable}
g[x_][y_] := g[x] + y
L[g] ^:= Log[g]
g[(x_) (y_)] := g[x] g[y]
Seems to work. Anything wrong?
--
Andrzej Kozlowski
Toyama International University
JAPAN
http://sigma.tuins.ac.jp
http://eri2.tuins.ac.jp
----------
>From: Dr Phillip Kent <p.kent at ic.ac.uk>
To: mathgroup at smc.vnet.net
>To: mathgroup at smc.vnet.net
>Subject: [mg17514] [mg17464] A new symbol to "inherit" the definitions from an existing
symbol?
>Date: Sun, May 9, 1999, 5:44 PM
>
> A colleague just put this to me, and it seems such an obvious
> thing to do but neither of us know how to do it...
>
> I have a fairly complex (mathematical) function set up in terms
> of definitions, up values, down values, attributes, etc etc. All of
> these are directly visible with FullDefinition[]. All I want to do is
> to create a new function that immediately takes on all the definitions
> from a given function. Granted that this may be ill-defined in
> general, but let's assume that I'm going to take responsibility for the
> self-consistency of the operation.
>
> Well, I can see it's not too hard to Save[] the definitions for a
> symbol, Read[] them back in using Hold[]'s, do a substitution rule
> and release the Holds. Or, take the output cell containing the
> FullDefinition[], copy it to an input cell and process that expression.
> But, these are both bizarre procedures.
>
> Suggestions?
>
> -Phillip
>
> ----------------------------------+----------------------------
> Dr Phillip Kent | tel: +44 (0)171 594 8503
> The METRIC Project | fax: +44 (0)171 594 8517
> Mathematics Department |
> Imperial College | p.kent at ic.ac.uk
> London SW7 2BZ, U.K. | http://metric.ma.ic.ac.uk/
> ----------------------------------+----------------------------
> "Ask not what you can do TO your data structures,
> Ask what your data structures can do FOR you."