What's the purpose of the Unique function?

9

As the title says: What's the purpose of Unique?

  • I understand that it generates some unique symbol, but when and for what is it to be used? Are there applications in practical solutions, or is it for the backend of programs (I noticed that Block etc use variable names similar to what Unique creates)?
  • How do I use a variable generated by Unique? Do I store its name in another variable and then use that as a pointer of some sort by converting its content (e.g. $123) to an expression somehow?

David

Posted 2012-01-21T07:29:55.087

Reputation: 14 421

1

Have you seen this?

– J. M.'s ennui – 2012-01-21T07:35:17.453

That's a question Unique is the answer for. I'm aware of what it does, just not when and how. – David – 2012-01-21T09:02:49.803

1

Take a look at this answer of mine where I needed a variable number of localized variables. I'm also showing how to use Temporary to avoid polluting the namespace with a large number of symbols.

– Szabolcs – 2012-01-21T09:07:52.277

Answers

17

Probably the most common use of Unique is in situations when you need a large number of local variables (and sometimes a variable number of local variables) so using Module is either inconvenient or impossible. In that case you can use the construction: vars= Table[Unique[x],{n}] or something of this kind. You can find a few examples in the archives of the MathGroup. One that I remember being quite pleased with myself can be found here:

http://mathforum.org/kb/thread.jspa?forumID=79&threadID=1185003&messageID=3868818

Andrzej Kozlowski

Posted 2012-01-21T07:29:55.087

Reputation: 2 684

4

Welcome to Mathematica.SE, and thank you for the answer! I have slightly reformatted your answer to align it with the conventions of this site. You can click the 'edit' link to see how to achieve this effect. If you have any questions, please don't hesitate to ask, either in a comment here, in the "meta" section of this site, or by directly emailing me!

– Szabolcs – 2012-01-21T09:12:51.830

3I second that! Great that you are here, Andrzej! – Leonid Shifrin – 2012-01-21T09:24:54.207

1Welcome Andrzej. great that you joned. – None – 2012-01-21T09:38:24.787

6

Here are two applications I have run into:

1) Creating functions which, given some input, output a system of equations to be solved, or which create a system of equations and solves them.

1a) Create an n $\times$ n matrix of unknown variables:

varMatrix[m,n]:=Table[Unique[],{m},{n}]

1b) Modify a polynomial variety (or rather, a system of polynomials which we wish to make zero simultaneously) so that a certain variable becomes invertible, via the standard trick:

varietyWithInvertibleVariable[variety_,variable_]:=
  Append[variety, variable * Unique[] - 1]

2) Associating symbols to expressions:

reference[x_]:= Module[{ref},
  (reference[x]=ref=Unique[];
   dereference[ref]=x;
   ref
  )

I've used this to construct formal linear combinations of data structures and manipulate them algebraically.

Tobias Hagge

Posted 2012-01-21T07:29:55.087

Reputation: 1 352

1Another example of 2 would be to render an expression inert (so it won't evaluate) by replacing all of the symbols with memoized undefined symbols. – Tobias Hagge – 2013-01-25T04:50:54.800