Re: Which is better, foo[n_Integer] or foo[n_?IntegerQ] ?
- To: mathgroup at smc.vnet.net
- Subject: [mg103789] Re: [mg103770] Which is better, foo[n_Integer] or foo[n_?IntegerQ] ?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Tue, 6 Oct 2009 08:00:42 -0400 (EDT)
- References: <200910051716.NAA10520@smc.vnet.net>
On 6 Oct 2009, at 02:16, Nasser Abbasi wrote:
> I am trying to improve some code I wrote by making the function
> definition
> more clear by setting restriction on the parameters.
>
> I noticed that I could write the following
>
> foo[n_Integer] := n^2
> boo[n_?IntegerQ] := n^2
>
> Both the above mean the same thing to me. i.e. the function is
> defined to
> take only integer argument.
>
> Is one better to use? or any one is just as good? (the first uses 2
> less
> characters!)
>
> thank you,
> --Nasser
>
>
>
>
>
The first one will be a little faster. For example:
ls = Join[RandomInteger[{-20, 20}, 10^5], RandomReal[{-20, 20}, 10^5]];
foo /@ ls; // Timing
{0.148462,Null}
boo /@ ls; // Timing
{0.19965,Null}
The second gives you more flexibility. For example, for any symbol,
say a, you can define an UpValue:
IntegerQ[a] ^= True;
then
boo[a]
a^2
This can be sometimes useful.
Andrzej Kozlowski
- References:
- Which is better, foo[n_Integer] or foo[n_?IntegerQ] ?
- From: "Nasser Abbasi" <nma@12000.org>
- Which is better, foo[n_Integer] or foo[n_?IntegerQ] ?