Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc, etc.

Estoy desconcertado por todas las funciones integradas de Mathematica que pretenden evitar la evaluación de alguna manera:Unevaluated, Defer, Hold, y más de media docena de la forma.Hold*. La documentación de Mathematica solo explica cada función de forma aislada sin explicar por qué elegiría una u otra. ¿Alguien puede ofrecer una explicación coherente de todas estas funciones? Todo el asunto me parece un enredo complicado. Relacionarlo todo con las macros de Lisp podría ser un buen lugar para comenzar.

La mayor parte del lenguaje de Mathematica está increíblemente bien diseñado, pero parece que Wolfram realmente se pintó en una esquina en este aspecto. O podría estar perdiendo algo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta