Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

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

Search the Archive

Re: Re: Rule-based programming: declare variables to be a number

  • To: mathgroup at smc.vnet.net
  • Subject: [mg80822] Re: [mg80797] Re: Rule-based programming: declare variables to be a number
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Mon, 3 Sep 2007 06:12:35 -0400 (EDT)
  • References: <fb83lf$82d$1@smc.twtelecom.net> <200709020651.CAA25850@smc.twtelecom.net>

On 2 Sep 2007, at 08:51, David Bailey wrote:

> As others have commented, it is not a good idea to write code like
> NumericQ[g]=True because this changes the basic operation of
> Mathematica. For example, such code might work OK until you try to
> combine it with some more code that needs NumericQ for something else!
>
> David Bailey
> http://www.dbaileyconsultancy.co.uk


Who are the "others"?
Anyway, I completely disagree with this statement in this particular  
context.

  NumericQ has clearly been designed with this in mind. Note, for  
example, that althou NumericQ is Protected, a definition like

NumericQ[a]=True

does not require unprotecting NumericQ. Moreover, it does not add a  
DownValue to NumericQ.

NumericQ[g] = True;
DownValues[NumericQ]
{}


There are plenty of other reasons to believe that all all  
theseproperties of NumericQ are designed precisely for this type of  
use. Besides, I have another reason to think that no probems of the  
kind you are imagining would happen in this case: I have been using  
NumericQ inprecisly this way for about 10 years in numerous notebooks  
without any problems.

Note alo the post from Carl Woll which, I think, can be regarded as  
an "offcial" WRI authorization for this kind of usage ;-)

(However, note also that using Carl's definition:

In[19]:= g /: NumericQ[g] = True;

Dos not actually add an UpValue to g:

UpValues[g]
{}

and I don't think it has any advantage over the more straightforward

NumericQ[g] = True;


I am sure all this is deliberate design, and even though it may not  
be easy to explain, it is very convenient.

Andrzej Kozlowski


  • Prev by Date: Re: Plot, Epilog, and Text
  • Next by Date: Re: check inside a loop?
  • Previous by thread: Re: Rule-based programming: declare variables to be a number
  • Next by thread: RE: Re: Re: Rule-based programming: declare variables to be a number