MathGroup Archive 2006

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

Search the Archive

RandomSeed Protection.

Did you ever get caught putting a function in your Mathematica code
that doesn't exist, then debugging it "until kingdom came", never using
Trace on the offending statement?

I do it sometimes, and it usually ruins my day. Especially, with
innocuous looking symbols such as RandomSeed (which is actually defined
in the System context) or FileName (also defined in System`) instead of
SeedRandom and ToFileName, etc.

Here is a code snippet that will throw Message in both situations

(* ======================== *)

General::"NoSym" = "The `1` symbol does NOT exist.`2`"

$NoSymbolQ = True;

RandomSeed[args___] := \
  Block[{$NoSymbolQ=False}, \
   Message[General::"NoSym", "RandomSeed", \
           " Did you mean \"SeedRandom\"?"]; \
   RandomSeed[args]] /; $NoSymbolQ

FileName[args___] := \
  Block[{$NoSymbolQ=False}, \
   Message[General::"NoSym", "FileName", \
           " Did you mean \"ToFileName\"?"]; \
   FileName[args]] /; $NoSymbolQ

End[(* System` *)]

(* ======================== *)

Put it at the end of the Kernel init.m file in
(...\Wolfram Research\Mathematica\5.2\Configuration\Kernel) directory,
and extent as needed.

Now, the offenders will generate messages;

In[1]:=  RandomSeed[12];

         General::NoSym: The RandomSeed symbol does NOT exist. Did you
          mean "SeedRandom"?

In[2]:=  FileName[{"abc", "dir"}, "file.txt"];
         General::NoSym: The FileName symbol does NOT exist. Did you
          mean "ToFileName"?

Setting $NoSymbolQ to False will turn off the mechanism.



  • Prev by Date: Re: RE: Solving the Cubic
  • Next by Date: Re: A serious error?
  • Previous by thread: Re: General--Mathematica and Subversion
  • Next by thread: Reduction of Radicals