2009-10-24 52 views
27

我被搞糊涂了所有内置在声称为防止评价以某种方式Mathematica函数:UnevaluatedDeferHold,超过半打形式Hold*。 Mathematica文档只是单独解释每个函数,而不解释为什么要选择其中一个。任何人都可以提供所有这些功能的连贯解释吗?整件事对我来说似乎是一团糟。将这一切与Lisp宏联系起来可能是一个很好的开始。数学:VS未作评估的VS推迟VS保持VS HoldForm VS HoldAllComplete等等等等

大多数Mathematica语言的令人惊讶的是精心设计的,但它似乎是真的钨自己画成在这方面的一个角落里。或者我可能会错过一些东西。

回答

11

这些都是非常棘手的结构,很难给出明确的解释;它们并不像Lisp宏那么简单(或者就此而言,Lisp的QUOTEEVAL之间的关系)。然而,在Wolfram的网站上有notes from Robby Villegas's 1999 talk "Unevaluated Expressions"的一个很好的,冗长的讨论。

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