2009-10-24 31 views
27

Estoy desconcertado por toda la incorporada en funciones de Mathematica que pretenden evitar que la evaluación de alguna manera: Unevaluated, Defer, Hold, y más de media docena de el formulario Hold*. La documentación de Mathematica simplemente 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 parece un lío enrevesado para mí. Relacionarlo todo con las macros de Lisp podría ser un buen lugar para comenzar.Mathematica: sin evaluar vs vs Defer Hold vs vs HoldForm HoldAllComplete vs etc, etc

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

Respuesta

11

Estas son construcciones bastante complicadas, y es difícil dar explicaciones claras; no son tan sencillos como las macros de Lisp (o, para el caso, la relación entre Lisp's QUOTE y EVAL). Sin embargo, hay una buena discusión larga disponible en el formulario de notes from Robby Villegas's 1999 talk "Unevaluated Expressions" en el sitio web de Wolfram.

Defer se omite en esa conversación, porque es nuevo a partir de Mathematica 6.0. Se parece mucho a HoldForm, excepto que cuando sale en un front-end (pero no en un kernel desnudo) se elimina, dejando una expresión que puede usarse como entrada. Esto es muy útil si desea construir mediante programación expresiones que un usuario puede editar y evaluar, por ejemplo, en una paleta.

Cuestiones relacionadas