MathGroup Archive 1995

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

Search the Archive

Evaluation of Rules

  • To: mathgroup at christensen.cybernetics.net
  • Subject: [mg600] Evaluation of Rules
  • From: seligjm at vax.sbu.ac.uk
  • Date: Fri, 24 Mar 1995 10:06:18 BST

Dear mathgroup,
  a collegue asked me the following,

A) Consider the following

In[1]:=  f[x_]:=f[x]

Now try

In[2]:=  f[1]

We get

Out[2]=   $IterationLimit::itlim:
          Iteration limit of 4096 exceeded.
          Hold[f[1]]

as expected, f[x_]:=f[x] is applied forever, the recursion does not end.

Now try the following definition:


In[3]:=   g[1]:=g[1]

then try

In[4]:=  g[1]

you get

Out[4]=  g[1]

In this case g[1]:=g[1] is applied (it seems) only once to g[1] but not to the
result of the first transformation. Why ??

B) why does

In[5]:=  h[g[2]]//.{g[2]:>1,h[g[2]]:>2}

give

Out[5]=  2

and not h[1]  ? i.e. why does h[g[2]]:>2 get applied first ?

I think the problem is that Mma treats rules defined by Set, SetDelayed etc
is different from the way it treats rules defined by Rule and RuleDelayed
evaluated by ReplaceAll etc.  If this is true it is certainly not documented
in Wolfram's book.

Any comments would be welcome.

Jon Selig


  • Prev by Date: Mesh and ParametricPlot3D
  • Next by Date: Re: Re(best answer)
  • Previous by thread: Mesh and ParametricPlot3D
  • Next by thread: Polar Plots ...