【问题标题】:Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etcMathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc等
【发布时间】:2010-12-09 15:37:07
【问题描述】:

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

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

【问题讨论】:

    标签: macros lisp language-design wolfram-mathematica


    【解决方案1】:

    这些都是相当棘手的结构,很难给出清晰的解释;它们不像 Lisp 宏那样简单(或者,就此而言,Lisp 的 QUOTE 和 EVAL 之间的关系)。然而,在 Wolfram 的网站上以notes from Robby Villegas's 1999 talk "Unevaluated Expressions" 的形式提供了一个很好的、冗长的讨论。

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

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2014-08-17
      • 2011-09-18
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多