Pergunta

Estou perplexo com todas as funções embutidas de Mathematica que pretendem evitar a avaliação de alguma forma: Unevaluated, Defer, Hold, e mais de meia dúzia da forma Hold*. A documentação do Mathematica apenas explica cada função isolada sem explicar por que você escolheria um ou outro. Alguém pode oferecer uma explicação coerente de todas essas funções? A coisa toda parece uma bagunça complicada para mim. Relacionar tudo com as macros Lisp pode ser um bom lugar para começar.

A maior parte da língua Mathematica é incrivelmente bem projetada, mas parece que Wolfram realmente se pintou em um canto nesse aspecto. Ou eu poderia estar perdendo alguma coisa.

Foi útil?

Solução

Essas são construções bastante complicadas, e é difícil dar explicações claras; Eles não são tão diretos quanto as macros Lisp (ou, nesse caso, o relacionamento entre os Lisp's QUOTE e EVAL). No entanto, há uma boa e longa discussão disponível na forma de Notas da palestra de Robby Villegas em 1999 "Expressões não avaliadas" no site da Wolfram.

Defer é omitido dessa palestra, porque é novo como Mathematica 6.0. É muito parecido HoldForm, exceto que, quando é emitido em um front-end (mas não em um núcleo nu), é retirado, deixando uma expressão que pode ser usada como entrada. Isso é muito útil se você deseja construir programaticamente expressões que um usuário possa editar e avaliar, digamos em uma paleta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top