I suppose one might take the question to mean, Why was it decided to have Plot[]
hold its arguments and not evaluate the function(s) until the variable has been given a value? It is a choice. If Plot[]
(and Table[]
, etc.) let their arguments be evaluated, then we would have to learn to program our plotting as follows, unless we could be sure x
had not already been given a value:
Block[{x},
Plot[D[Sin[x], x], {x, 0, 10}]
]
Programmers could Block[]
the variables themselves instead of having Plot[]
, Table[]
, etc. do it automatically. We would get used to it, and maybe someone would be asking, Why do I have to use Block[]
?
Instead another choice was made, and occasionally we have to use Evaluate[]
. As Gianluca said, Mathematica programmers have to get used to this. The number of times I have to use Evaluate[]
is fairly small compared to how often I would have to use Block[]
, so the choice seems convenient to me. OTOH, I was used to having to localize variables in C, so having to use Block[]
all the time would probably have seemed normal.