0
|
8000 Views
|
|
2 Total Likes
View groups...
Share
GROUPS:

# What am I missing? Very basic

Posted 10 years ago
 I've been using Mathematica for many years, and suddenly this very basic issue crops up. Why do the first and second inputs evaluate correctly but the third doesn't? In[114]:= Select[{1, 2, 3, 4, 5}, # > 2 &] Select[{1, 2, 3, 4, 5}, # > xx & /. xx -> 2] Select[{1, 2, 3, 4, 5}, # > xx &] /. xx -> 2 Out[114]= {3, 4, 5} Out[115]= {3, 4, 5} Out[116]= {} 
 In the case of Select[{1, 2, 3, 4, 5}, # > xx &] /. xx -> 2 the  Select[{1, 2, 3, 4, 5}, # > xx &] is evaluated first (it returns {} obviously) and then the replacement rule is applied to the result (again returning {}). The standard Mathematica evaluation sequence is to evaluate expressions from the inside out of the FullForm of the expression. FullForm[Hold[Select[{1, 2, 3, 4, 5}, # > xx &] /. xx -> 2]] returns Hold[ReplaceAll[ Select[List[1, 2, 3, 4, 5], Function[Greater[Slot[1], xx]]], Rule[xx, 2]]] and this shows that the ReplaceAll in this case is the outermost function--everything inside of it is evaluated first. In contrast your second example, FullForm[Hold[Select[{1, 2, 3, 4, 5}, # > xx & /. xx -> 2]]] which returns Hold[Select[List[1,2,3,4,5],ReplaceAll[Function[Greater[Slot[1],xx]],Rule[xx,2]]]] has the replacement rule being applied within the Select's second argument.I hope this helps...