We can define a variable to have a certain value using the syntax

variable = expression

Note that every definition also must have a type signature before it. So, for example,

x : Z
x = -17

declares the variable x to have the type Z and to represent the value -17. From now on, whenever we use x, it can be thought of as an abbreviation for the number -17.

Note that the equals sign in Disco really means mathematical equality, like an equation in algebra, and that a variable can have only one definition. If you are already familiar with an imperative language like Python or Java, read the next section for a comparison with Disco. If Disco is your first programming language, you can skip this (though you may read it if you are interested).

Definition vs assignment

In many imperative languages, variables can be thought of as “boxes” that store values, and the equals sign means assignment. For example, in Python,

x = 5
x = 7

means that we should first assign the value 5 to the variable x; then, we replace the value stored by x with 7.

In contrast, in Disco (as in some other functional languages), variables are names for values, and the equals sign means definition. In Disco,

x = 5
x = 7

is an error, because x cannot be defined as both 5 and 7; it cannot be equal to both at the same time. In other words, it is like a system of two equations with no solution.