32

我对所有声称以某种方式阻止评估的内置 Mathematica 函数感到困惑:UnevaluatedDeferHold和超过六种形式的Hold*. Mathematica 文档只是单独解释了每个函数,而没有解释为什么要选择其中一个。任何人都可以对所有这些功能提供一个连贯的解释吗?整件事对我来说似乎是一团糟。将这一切与 Lisp 宏联系起来可能是一个不错的起点。

大多数 Mathematica 语言都经过精心设计,但似乎 Wolfram 真的在这方面把自己画到了一个角落。或者我可能会遗漏一些东西。

4

1 回答 1

13

这些都是相当棘手的结构,很难给出明确的解释;它们不像 Lisp 宏那样简单(或者,就此而言,LispQUOTE和之间的关系EVAL)。然而,在 Wolfram 的网站上,罗比·维勒加斯 1999 年的演讲“未评估的表达式”以笔记的形式提供了一个很好的、冗长的讨论。

Defer那次谈话中省略了,因为它是 Mathematica 6.0 的新内容。它很像HoldForm,除了当它在前端(但不是裸内核)中输出时,它会被剥离,留下一个可以用作输入的表达式。如果您想以编程方式构建用户可以编辑和评估的表达式,例如在调色板中,这将非常有用。

于 2009-10-26T17:42:28.957 回答