Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to run this:

domain := {n, 0, 10};
Plot[n, domain]

but it doesn't work. Instead, it generates the message

Plot::pllim: Range specification domain is not of the form {x, xmin, xmax}.

and returns

Plot[n, domain].


I've also tried alternatives such as using =, or trying to define Domain[n_] = {n, 0, 10} but it all seemed to be of no avail.

share|improve this question
up vote 12 down vote accepted


domain := {n, 0, 10};
Plot[n, Evaluate[domain]]

Plot has the HoldAll attribute which prevents domain from evaluating:

{HoldAll, Protected}
share|improve this answer
@Szabolcs, I think I should transfer half my reputation, since you make my terse posts actually readable. Thanks once more. – user21 Feb 28 '12 at 13:53

Indeed the cause is the evaluation order resulting from the HoldAll attribute of Plot. Here are several ways to get around this:

domain := {n, 0, 10};

Plot[n, Evaluate[domain]]

Plot[n, #] & @ domain

With[{d = domain}, Plot[n, d]]

{domain} /. {d__} :> Plot[n, d]
  • I normally favor the method using Function (&) for its brevity.
  • I think With can be the most easy to read in longer expressions.
  • The last method is specialized and is helpful in difficult operations.
share|improve this answer

Alternatively, I only define the range but not the iterator variable, as it is then outside of its scope (n in Plot[f, {n, 0, 1}] is local to Plot):

domain = {0, 10};
Plot[n, {n, First[domain], Last[domain]}]


domain = {0, 10};
Plot[n, Evaluate@{n, Sequence @@ domain}]
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.