maintains expr in an unevaluated form.


  • Hold has attribute HoldAll and performs no operation on its arguments.
  • Hold is removed by ReleaseHold. »
  • Hold[e1,e2,] maintains a sequence of unevaluated expressions to which a function can be applied using Apply.
  • Even though expr itself is not evaluated, Hold[expr] may still evaluate if expr is of the form f[args], and upvalues for f have been defined. »


open allclose all

Basic Examples  (1)

Hold an expression to prevent evaluation:

Release the hold:

Applications  (2)

Find the length of each expression in a held list without evaluation:

Evaluate every sum (only) inside a held expression:

Properties & Relations  (9)

Hold is a container with the attribute HoldAll:

Use Evaluate to force evaluation of an argument of Hold:

Unevaluated inside a held expression is not removed:

Sequence splicing still happens inside Hold:

Use the container HoldComplete to suppress even such transformations:

Upvalues work inside Hold:

They do not work inside HoldComplete:

Substitution works inside Hold:

Insert into a held expression:

ReleaseHold removes one level of Hold:

HoldForm is like Hold but is normally not shown in the output:

Introduced in 1988