# Resolving Error: Mathematica evaluation order on Lists

I have a table that is 27 x 27, each entry corresponds to an element from the periodic table. I use the replacement rules in element list to allow me to convert a list of elements into a list of coordinates, so that I can access values from the table. Here test is a list of elements whose values I want to access. The function getBigSeg returns {0,0} if the core == shell, and otherwise returns the value from the table.

bigSegTable = Table[i + j, {i, 27}, {j, 27}];
getBigSeg[core_, shell_] :=
If[core == shell, {0, 0}, {bigSegTable[[core, shell ]] ,
bigSegTable[[core, shell]]}]
elementList = {"Sc" -> 1, "Ti" -> 2, "V" -> 3, "Cr" -> 4, "Mn" -> 5,
"Fe" -> 6, "Co" -> 7, "Ni" -> 8, "Cu" -> 9, "Zn" -> 10, "Y" -> 11,
"Zr" -> 12, "Nb" -> 13, "Mo" -> 14, "Tc" -> 15, "Ru" -> 16,
"Rh" -> 17, "Pd" -> 18, "Ag" -> 19, "Hf" -> 20, "Ta" -> 21,
"W" -> 22, "Re" -> 23, "Os" -> 24, "Ir" -> 25, "Pt" -> 26,
"Au" -> 27};

test = {{"Ti", "Ag"}, {"Zr", "Ag"}, {"Nb", "Ag"}, {"Tc", "Ag"}, {"Ru",
"Ag"}, {"Ag", "Ag"}, {"Hf", "Ag"}, {"Ta", "Ag"}, {"Re",
"Ag"}, {"Os", "Ag"}, {"Ir", "Ag"}};


I want to know why if I do: getBigSeg[#1, #2] & @@@ test /. elementList

I get an error. But I do not get an error if I do

    getBigSeg[#1, #2] & @@@ {{2, 19}, {12, 19}, {13, 19}, {15, 19}, {16,
19}, {19, 19}, {20, 19}, {21, 19}, {23, 19}, {24, 19}, {25, 19}}


This is strange to me because

test /. elementList


gives

{{2, 19}, {12, 19}, {13, 19}, {15, 19}, {16,
19}, {19, 19}, {20, 19}, {21, 19}, {23, 19}, {24, 19}, {25, 19}}


So I do not understand why I am getting an error, and what is different between the two expressions.

EDIT: Corrected typo.

It is due to the precedence of the operators (see http://reference.wolfram.com/mathematica/tutorial/OperatorInputForms.html ).

Apply ( @@ and @@@ ) have a higher precedence than ReplaceAll ( /. ). Consequently,

getBigSeg[#1,#2]&@@@test/.elementList


is equivalent to

(getBigSeg[#1,#2]&@@@test)/.elementList


To avoid the error messages you want to use parentheses to control the evaluation order:

getBigSeg[#1,#2]&@@@(test/.elementList)

• One easy way to check this if working in the frontend is to place the cursor on test and then keep pressing ctrl-. repeatedly.
– acl
Commented Jun 4, 2014 at 18:16
• On a Mac, rapidly clicking rather than using ctrl will progressively extend the highlighting. Commented Jun 4, 2014 at 18:29
• That too. I think it works on Linux too, so presumably also on Windows.
– acl
Commented Jun 4, 2014 at 18:30