The Meaning of Expressions

The notion of expressions is a crucial unifying principle in the Wolfram System. It is the fact that every object in the Wolfram System has the same underlying structure that makes it possible for the Wolfram System to cover so many areas with a comparatively small number of basic operations.

Although all expressions have the same basic structure, there are many different ways that expressions can be used. Here are a few of the interpretations you can give to the parts of an expression.

Some interpretations of parts of expressions.

Expressions in the Wolfram System are often used to specify operations. So, for example, typing in 2+3 causes 2 and 3 to be added together, while (RefLink[Factor, paclet:ref/Factor])[x^6-1] performs factorization.

Perhaps an even more important use of expressions in the Wolfram System, however, is to maintain a structure, which can then be acted on by other functions. An expression like {a,b,c} does not specify an operation. It merely maintains a list structure, which contains a collection of three elements. Other functions, such as (RefLink[Reverse, paclet:ref/Reverse]) or (RefLink[Dot, paclet:ref/Dot]), can act on this structure.

The full form of the expression {a,b,c} is (RefLink[List, paclet:ref/List])[a,b,c]. The head (RefLink[List, paclet:ref/List]) performs no operations. Instead, its purpose is to serve as a "tag" to specify the "type" of the structure.

You can use expressions in the Wolfram System to create your own structures. For example, you might want to represent points in three-dimensional space, specified by three coordinates. You could give each point as point[x,y,z]. The "function" point again performs no operation. It serves merely to collect the three coordinates together, and to label the resulting object as a point.

You can think of expressions like point[x,y,z] as being "packets of data", tagged with a particular head. Even though all expressions have the same basic structure, you can distinguish different "types" of expressions by giving them different heads. You can then set up transformation rules and programs which treat different types of expressions in different ways.