For these pieces of code how can I "r" evaluated. When I use If "r" remains unevaluated. When I use Which "r" is only evaluated when the first case is True. Can I get some help? Thanks
Clear[aa, bb, fIf, r];
fIf[u_, v_] := Block[{aa = u + v + w, bb = 2 u - v - w},
If[bb > aa, r = BB];
If[aa > bb, r = AA];
If[aa == bb, r = AB];
{aa, bb, r}
]
{fIf[2, 2], fIf[2, 1], fIf[2, 0]} //. w -> -1
{fIf[2, 2], fIf[2, 1], fIf[2, 0]} //. w -> 0
{fIf[2, 2], fIf[2, 1], fIf[2, 0]} //. w -> 1
Clear[aa, bb, r1, r2, r3];
fWhich[u_, v_] = Block[{aa = u + v + w, bb = 2 u - v - w},
r1 = Which[aa == bb, AB, aa > bb, AA, bb > aa, BB];
r2 = Which[aa > bb, AA, aa == bb, AB, bb > aa, BB];
r3 = Which[bb > aa, BB, aa > bb, AA, aa == bb, AB];
{aa, bb, r1, r2, r3}
];
{{"aa", "bb", "r1", "r2", "r3"}, fWhich[2, 1], fWhich[2, 2], fWhich[2, 0]} //. w -> -1 // MatrixForm
{{"aa", "bb", "r1", "r2", "r3"}, fWhich[2, 1], fWhich[2, 2], fWhich[2, 0]} //. w -> 0 // MatrixForm
{{"aa", "bb", "r1", "r2", "r3"}, fWhich[2, 1], fWhich[2, 2], fWhich[2, 0]} //. w -> 1 // MatrixForm