MathGroup Archive 2005

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

Search the Archive

Re: Re: Types in Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg62779] Re: Re: Types in Mathematica
  • From: "Steven T. Hatton" <hattons at globalsymmetry.com>
  • Date: Mon, 5 Dec 2005 03:37:38 -0500 (EST)
  • References: <200511191053.FAA16418@smc.vnet.net> <dlp2ci$le$1@smc.vnet.net> <200511200950.EAA04496@smc.vnet.net> <dls4vp$mmc$1@smc.vnet.net> <dm1ak3$i1n$1@smc.vnet.net> <dmjrb8$5u6$1@smc.vnet.net> <dmm2tp$nmo$1@smc.vnet.net> <200512031040.FAA06695@smc.vnet.net> <dmtbuu$fo6$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Kristen W Carlson wrote:

> 5. If I am extending built-in or user-defined functions (like Plus),
> should I restrict users to using a constructor to do that, or extend
> the existing function in the context of my data type with an upvalue?

I'm not sure what you mean here. Can you provide examples?

 
> But below is an example that admittedly is borderline; altho I wrote
> it as extending Part with an upvalue to extract the numerator or
> denominator of a rational number (created as a new datatype as an
> exercise from M220 the programming course), I can see the other point
> of view--not allowing Part to do this.
> ....
> The datatype is rational[n_Integer, d_Integer] with n and d
> type-checked as integers ....
> 
> makeRational[n_Integer, 0] :=
>   Print["This rational is undefined."] (* better than just getting
> input back as output *)
> 
> (* vs. this approach which Maeder wrote that does automatic type
> conversion;  for a negative denominator, it calls the function again
> and just reverses the signs of the numerator and denominator; that way
> negative rationals are always in the format rational[-n, d]  *)
> 
> makeRational[n_Integer, d_Integer?Negative] := makeRational[-n, d]
> ...
> denominator::"denominator will extract the denominator of the
> rational. You can also use Part[ rational ] , which has been modified
> to work correctly in the context of this package."
> ...
> rational /: (r_rational)[[1]] := numerator[r];  (* numerator is the
> constructor *)
> 
> rational /: (r_rational)[[2]] := denominator[r]; (* denominator is the
> constructor *)

Do you mean "selector" where you wrote "constructor" in the last two
expressions? 

Thanks for posting that example.  It was instructive.

-- 
The Mathematica Wiki: http://www.mathematica-users.org/
Math for Comp Sci http://www.ifi.unizh.ch/math/bmwcs/master.html
Math for the WWW: http://www.w3.org/Math/


  • Prev by Date: Re: Turning on numerical computation
  • Next by Date: Re: How would you evaluate this limit in Mathematica
  • Previous by thread: Re: Types in Mathematica
  • Next by thread: Re: Re: Types in Mathematica