Operator overloading with Symbol tags: Correction!
- To: mathgroup at smc.vnet.net
- Subject: [mg3937] Operator overloading with Symbol tags: Correction!
- From: cturner at bbn.com (A. Chase Turner)
- Date: Fri, 10 May 1996 03:30:59 -0400
- Organization: BBN
- Sender: owner-wri-mathgroup at wolfram.com
(I knew I should have eaten another Snickers bar before I posted the
previous message :)
I hand typed the previous example and mistakenly used a '+' instead of an '*'.
This is the example using patterns:
In[99]:=
(* -------BEGIN---------- *)
$NewSymbol = Print["Name: ", #1, " Context: ", #2]&
Fee; (* A Symbol 'Fee' *)
Foo; (* A Symbol 'Foo' *)
overloadMe[x:Fee] := x * 10 / Fee;
overloadMe[x:Foo] := x * 100 / Foo;
overloadMe[x_Symbol] := -1;
overloadMe[ 10 Fee] + overloadMe[ 1 Foo]
Name: Fee Context: Global`
Name: Foo Context: Global`
Name: overloadMe Context: Global`
Out[105]=
100 + overloadMe[10 Fee]
This is a second example using delayed evaluation:
In[110]:=
(* -------BEGIN---------- *)
Fee; (* A Symbol 'Fee' *)
Foo; (* A Symbol 'Foo' *)
overloadMe[x_Fee] := x * 10 / Fee;
overloadMe[x_Foo] := x * 100 / Foo;
overloadMe[x_Symbol] := -1;
overloadMe[ 10 Fee] + overloadMe[ 1 Foo]
Name: Fee Context: Global`
Name: Foo Context: Global`
Name: overloadMe Context: Global`
Out[116]=
-1 + overloadMe[10 Fee]
Three questions:
A) Why isn't 'overloadedMe[10 Fee]' reduced to '-1' in both examples?
B) Relative to the second example,
If I unprotect 'Head' and specialize it so that
Head[ 1 Fee ] returns 'Fee' (and similarly for
Foo), am I opening the Pandora's box of inexperience
and leading my notebooks straight to _ell?
C) How do I overload the function arguments so that:
In[58]:=
overloadMe[ 10 Fee] + overloadMe[ 1 Foo]
Out[59]=
200
Regards,
<cturner at bbn.com>
--
A. Chase Turner
--
A. Chase Turner
==== [MESSAGE SEPARATOR] ====