Mathematica: Non évalué vs Différé vs Hold vs HoldForm vs HoldAllComplete vs etc etc.
-
06-07-2019 - |
Question
Je suis déconcerté par toutes les fonctions intégrées de Mathematica censées empêcher l'évaluation de quelque manière que ce soit: Non évalué
, Différer
, En attente
et plus d’une demi-douzaine de la forme Hold *
. La documentation de Mathematica explique simplement chaque fonction séparément, sans expliquer pourquoi vous choisiriez l'une ou l'autre. Quelqu'un peut-il offrir une explication cohérente de toutes ces fonctions? Tout cela me semble être un fouillis compliqué. Relier tout cela aux macros Lisp peut être un bon point de départ.
La plupart des langues de Mathematica sont incroyablement bien conçues, mais il semble que Wolfram se soit vraiment mis en quatre sur cet aspect. Ou je pourrais manquer quelque chose.
La solution
Ce sont des constructions assez délicates, et il est difficile de donner des explications claires; ils ne sont pas aussi simples que les macros Lisp (ou, en l'occurrence, la relation entre QUOTE
et EVAL de Lisp). Cependant, une longue et longue discussion est disponible sous la forme de notes de la conférence de 1999 de Robby Villegas. Expressions non évaluées " sur le site Web de Wolfram.
Defer
est omis de cette présentation, car il s'agit d'une nouveauté pour Mathematica 6.0. Cela ressemble beaucoup à HoldForm
, sauf que lorsqu'il est sorti dans un frontal (mais pas dans un noyau nu), il est supprimé, ce qui laisse une expression qui peut être utilisée comme entrée. Ceci est très utile si vous voulez construire par programmation des expressions qu'un utilisateur peut éditer et évaluer, par exemple dans une palette.