If, in code, E is an expression it has a value as soon as it is defined and/or assigned to. *E, on the other hand, has a value only when it is evaluated either in the context of a pattern or in the context of an EVAL. The following example shows the motivation for unevaluated expressions in pattern matching contexts: