我对所有内置的Mathematica函数感到困惑,这些函数旨在以某种方式阻止评估: Unevaluated Defer Hold ,以及 Hold * 形式的六个以上。 Mathematica文档只是单独解释了每个函数,但没有解释为什么要选择其中一个函数。任何人都可以对所有这些功能提供一致的解释吗?整件事对我来说似乎是一个令人费解的混乱。将它全部与Lisp宏相关可能是一个很好的起点。

大多数Mathematica语言都设计得非常好,但看起来Wolfram在这方面确实把自己描绘成了一个角落。或者我可能会遗漏一些东西。

有帮助吗?

解决方案

这些都是非常棘手的结构,很难给出明确的解释;它们不像Lisp宏那样简单(或者,就此而言,Lisp的 QUOTE EVAL 之间的关系)。但是,有一个很好的,冗长的讨论,可以通过 Robby Villegas 1999年演讲中的说明“进行讨论。 Wolfram网站上的未评估表达式

延迟在该演讲中被省略,因为它是Mathematica 6.0的新版本。这很像 HoldForm ,除了当它在前端(但不是裸内核)输出时,它被剥离,留下一个可以用作输入的表达式。如果您想以编程方式构造用户可以编辑和评估的表达式,比如在调色板中,这非常有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top