There are two ways to assign a value to something in the Wolfram Language: immediate assignment (=), and delayed assignment (:=).

In immediate assignment, the value is computed immediately when the assignment is done, and is never recomputed. In delayed assignment, the computation of the value is delayed, and is done every time the value is requested.

As a simple example, consider the difference between value=RandomColor[ ] and value:=RandomColor[ ].

value=RandomColor[ ]

value

value:=RandomColor[ ]

value

value

It’s very common to use := if something isn’t ready yet when you’re defining a value.

circles:=Graphics[Table[Circle[{x,0},x/2],{x,n}]]

n=6

circles

The idea of delayed assignment is directly analogous to the Delayed construct we discussed for deploying webpages. In delayed assignment we don’t compute a value until we need it. Similarly, when we use CloudDeploy with Delayed we don’t compute the content of a webpage until someone asks for it.

There’s a notion of delayed rules too. x->rhs computes rhs immediately. But in a delayed rule x:>rhs (typed :>), rhs is instead recomputed every time it’s requested.

x->RandomReal[ ]

{x,x,x,x}/.x->RandomReal[ ]

x:>RandomReal[ ]

{x,x,x,x}/.x:>RandomReal[ ]

Replace x in {x,x+1,x+2,x^2} by the same random integer up to 100. »

Replace each x in {x,x+1,x+2,x^2} by a separately chosen random integer up to 100. »

Why not always use :=?

Because you don’t want to have to recompute things unless it’s necessary. It’s more efficient to just compute something once, then use the result over and over again.

How does one read := and :> out loud?

:= is usually just “colon equals”, though sometimes “delayed assignment”. :> is usually “colon greater”, though sometimes “delayed rule”.

What happens if I do x=x+1, with x not having a value?

You’ll start an infinite loop that’ll eventually get cut off by the system. x={x} is the same story.

What’s the significance of inputs being labeled In[n]:=, and outputs Out[n]= ?

It indicates that inputs are assigned to In[n] and outputs to Out[n]. The := for input means the assignment is delayed, so that if you ask for In[n] the result will be recomputed.

Tech Notes