Nicholas Clark <[EMAIL PROTECTED]> wrote:
> On Thu, Dec 07, 2000 at 01:14:40PM +0000, David Mitchell wrote:
> > Dan Sugalski <[EMAIL PROTECTED]> wrote:
> 
> > > All the math is easy if the scalars are of known types. Addition and 
> > > multiplication are easy if only one of the scalars involved is of known 
> > > type. Math with both of unknown type, or subtraction and division with the 
> > > right-hand operand of unknown type, is rather more difficult. :(
> > 
> > I'm not clear with your scheme how addition works if one of the scalars
> > (the adder) is of unknown type. ie
> > 
> > given sv1 of type NUM, sv2 of type UNKNOWN; $sv1 + $sv2 would invoke:
> > 
> > sv1->add[UNKNOWN](sv2),
> > 
> > which somewhere will cause a function in the vtable for NUMs to be called, 
eg
> > 
> > NUM_add_UNKNOWN(sv1,sv2) { .... }
> > Now, how does does this function perform its calculation?
> 
> I'm guessing that Dan is planning to take advantage of addition and
> multiplication being commutative.
> 
> sv1->add[UNKNOWN](sv2)
> 
> swaps to 
> 
> sv2->add[NUM](sv1)
> 
> (It's "obvious" in the usual way - not obvious until you see it. I've been
> prodding in pp_add in perl5, so I've been thinking about these sort of
> things)

My original suggestion was that scalar types provide a method that says
how 'big' it is (so complex > bigreal > real > int etc),
and pp_add(), pp_sub() etc use these values to call the method associated
with the biggest operand, swapping args if necessary (and passing a flag
indicating that arg swapping has taken place).

Reply via email to