Message Boards Message Boards

GROUPS:

What am I missing? Very basic

Posted 9 years ago
6800 Views
|
1 Reply
|
2 Total Likes
|

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]= {}
POSTED BY: Aaron S

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...

POSTED BY: David Reiss
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract