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