我对所有旨在以某种方式阻止评估的内置 Mathematica 函数感到困惑:Unevaluated
, Defer
, Hold
,以及超过六种形式Hold*
。 Mathematica 文档只是单独解释每个函数,而没有解释为什么选择其中一个函数。谁能对所有这些功能提供一个连贯的解释?整个事情对我来说似乎是一团混乱。将它与 Lisp 宏联系起来可能是一个很好的起点。
大多数 Mathematica 语言的设计都非常出色,但看起来 Wolfram 在这方面确实把自己逼到了墙角。或者我可能会遗漏一些东西。
这些都是相当棘手的结构,很难给出清晰的解释;它们不像 Lisp 宏那么简单(或者说,Lisp 宏之间的关系)QUOTE
and EVAL
)。然而,有一个很好的、冗长的讨论,其形式是Robby Villegas 1999 年演讲“未评估的表达”的笔记 http://library.wolfram.com/infocenter/Conferences/377/在沃尔夫勒姆的网站上。
Defer
该演讲中省略了它,因为它是 Mathematica 6.0 中的新内容。这很像HoldForm
,除了当它在前端(但不是裸内核)中输出时,它被剥离,留下一个可以用作输入的表达式。如果您想以编程方式构造用户可以编辑和计算的表达式(例如在调色板中),这非常有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)