Pregunta

Estoy desconcertado por todas las funciones integradas de Mathematica que pretenden impedir la evaluación de alguna manera: Noevaluated , Defer , Hold y más de media docena del formulario 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ía 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.

¿Fue útil?

Solución

Estas son construcciones bastante difíciles, y es difícil dar explicaciones claras; no son tan sencillas como las macros de Lisp (o, para el caso, la relación entre QUOTE y EVAL de Lisp). Sin embargo, hay una discusión larga y buena disponible en forma de notas de la charla de 1999 de Robby Villegas " Expresiones no evaluadas " en el sitio web de Wolfram.

Defer se omite en esa charla, porque es nuevo en Mathematica 6.0. Es muy parecido a HoldForm , excepto que cuando se imprime en un front-end (pero no en un núcleo desnudo) se elimina, dejando una expresión que se puede usar como entrada. Esto es muy útil si desea construir mediante programación expresiones que un usuario pueda editar y evaluar, por ejemplo, en una paleta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top