MathGroup Archive 1997

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

Search the Archive

Re: Argument typing in Compile

  • To: mathgroup at smc.vnet.net
  • Subject: [mg9412] Re: Argument typing in Compile
  • From: Paul Abbott <paul at physics.uwa.edu.au>
  • Date: Wed, 5 Nov 1997 01:56:30 -0500
  • Organization: University of Western Australia
  • Sender: owner-wri-mathgroup at wolfram.com

Sean Ross wrote:

> With normal mathematica functions, there is a built-in "case" structure
> for overloading the definition of a particular symbol.  For example:
> 
> f[x_Integer]:=function1;
> f[x_Real]:=function2;

This is fine:

  In[1]:= f[x_Real] := f1[x]
  In[2]:= f[x_Integer] := f2[x]

> Now suppose I want to do the same with CompiledFunction objects.
> 
> f[x_Real]=Compile[{x,_Real},x^2]  and other permutations where the
> symbol f is given an argument list generate an error message that
> Compile is protected.

This does not make sense because Compile[{x,_Real},x^2] is, essentially,
a pure function, i.e., x is a dummy variable.  Also, to "type"
variables you need nested list brackets:

  In[3]:= ?Compile

"Compile[{x1, x2, ... }, expr] creates a compiled function which
evaluates \
expr assuming numerical values of the xi. Compile[{{x1, t1}, ... },
expr] \
assumes that xi is of a type which matches ti. Compile[{{x1, t1, n1},
... }, \
expr] assumes that xi is a rank ni array of objects each of a type which
\
matches ti. Compile[vars, expr, {{p1, pt1}, ... }] assumes that \
subexpressions in expr which match pi are of types which match pti."

> Does anyone know of a way to define a symbol that will execute one bit
> of compiled code for certain types of arguments and another bit of
> compiled code for other arguments without resorting to an explicit If
> or Case structure?

With the definitions above, the following does what you want:

  In[4]:= f1 = Compile[{{x, _Real}}, x^2]; 

  In[5]:= f2 = Compile[{{x, _Integer}}, x^2]; 

  In[6]:= f /@ {1, 2, 3, 4, 1., 2., 3., 4.}
  Out[6]= {1,4,9,16,1.,4.,9.,16.}


Cheers,
	Paul 
____________________________________________________________________ 
Paul Abbott                                   Phone: +61-8-9380-2734
Department of Physics                           Fax: +61-8-9380-1014
The University of Western Australia            Nedlands WA  6907       
mailto:paul at physics.uwa.edu.au  AUSTRALIA                            
http://www.pd.uwa.edu.au/~paul

            God IS a weakly left-handed dice player
____________________________________________________________________


  • Prev by Date: Re: printing eps-graphics on postscript printer
  • Next by Date: Re: Question
  • Previous by thread: Re: Argument typing in Compile
  • Next by thread: RE: Newbie question: big matri