Questions about how Mathematica evaluates expressions, tracing evaluation (Trace*), handling expressions in unevaluated form (Hold*, Unevaluated), nonstandard evaluation, etc.
For questions about how and in what order Mathematica evaluates expressions, tracing evaluation (Trace
family), handling expressions in unevaluated form (Hold
, HoldForm
, HoldPattern
, Unevaluated
, Defer
), nonstandard or controlled evaluation (ReleaseHold
, Evaluate
), etc.
Questions about algebraic simplification of expressions should use simplifying-expressions. Questions about structural replacement/manipulation in/of held expressions should use expression-manipulation.
Useful links
- Principles of Evaluation (introducing evaluation concepts)
- Tutorial on Tracing Evaluation
- Guide on Evaluation Control
- Full guide on Evaluation
- Trott-Strzebonski in-place evaluation method and its explanation
Example questions
- Manipulate evaluation sequence
- How do I evaluate only one step of an expression?
- Injecting a sequence of expressions into a held expression
- How to inject an evaluated expression into a held expression?
- Implementing a safe ValueQ that does not evaluate its argument
- How to pass a symbolname to a function with any of the Hold attributes?