Macros Mathematica:未评估vs延迟vs保持vs保持窗体vs保持全部完成vs等

Macros Mathematica:未评估vs延迟vs保持vs保持窗体vs保持全部完成vs等,macros,lisp,language-design,wolfram-mathematica,Macros,Lisp,Language Design,Wolfram Mathematica,我对所有声称以某种方式阻止求值的内置Mathematica函数感到困惑:未求值,延迟,保持,以及超过六种形式的保持*。Mathematica文档只是单独解释了每个函数,而没有解释为什么要选择其中一个。有人能对所有这些功能提供一个连贯的解释吗?在我看来,整件事就像一团混乱。将其与Lisp宏联系起来可能是一个很好的起点 大多数Mathematica语言设计得非常好,但Wolfram似乎真的在这方面把自己逼到了绝境。或者我可能遗漏了什么。这些都是相当棘手的结构,很难给出明确的解释;它们不像Lisp宏那

我对所有声称以某种方式阻止求值的内置Mathematica函数感到困惑:
未求值
延迟
保持
,以及超过六种形式的
保持*
。Mathematica文档只是单独解释了每个函数,而没有解释为什么要选择其中一个。有人能对所有这些功能提供一个连贯的解释吗?在我看来,整件事就像一团混乱。将其与Lisp宏联系起来可能是一个很好的起点


大多数Mathematica语言设计得非常好,但Wolfram似乎真的在这方面把自己逼到了绝境。或者我可能遗漏了什么。

这些都是相当棘手的结构,很难给出明确的解释;它们不像Lisp宏那样简单(或者,就这点而言,Lisp的
QUOTE
EVAL
之间的关系)。然而,在Wolfram的网站上有一个很好的、冗长的讨论

Defer
在该演讲中被省略,因为它是Mathematica 6.0的新版本。它很像
HoldForm
,不同的是,当它在前端(而不是裸内核)输出时,它会被剥离,留下一个可以用作输入的表达式。如果您希望以编程方式构造用户可以编辑和计算的表达式(例如在调色板中),这非常有用