了解跟踪*

2024-04-17

再会,

当试图理解数学使用标准的评估顺序Trace and TraceScan最近开发的命令及其漂亮的视觉表示thread https://stackoverflow.com/questions/5459735/the-clearest-way-to-represent-mathematicas-evaluation-sequence,我在他们的行为中遇到了一些含糊之处。

首先,当我评估时

In[1]:= Trace[a+1,TraceOriginal->True]

I get

输出[1]= {a+1,{加},{a},{1},a+1,1+a,{加},{1},{a},1+a}

所有子列表都对应于子评估(如文档中所述)。最后一个表情1+a尽管文档中没有明确说明,但可能与评估结果相对应。但表达的具体含义是什么a+1 and 1+a在列表中间?到哪一个评估步骤标准评估顺序 http://reference.wolfram.com/mathematica/tutorial/Evaluation.html他们对应?

第二个奇怪的地方是TraceScan。考虑以下:

In[1]:= 列表={}; TraceScan[AppendTo[列表,StyleForm[#,"输入"]]&,(a+1),_,AppendTo[列表,#]&];列表

输出[1]= {a+1, Plus, Plus, a, a, 1, 1, 1+a, Plus, Plus, 1, 1, a, a, 1+a, a+1}

您可以看到列表中的最后两个表达式是1+a and a+1。两者都是(子)评估的结果。但实际输出是1+a所以我不明白为什么a+1位于评估链的末端?为什么没有a+1处于评估链的中间,就像在这种情况下一样Trace?这是一个错误吗?

附:这些结果重现于数学7.0.1 和 5.2。


The fp论证TraceScan用两个参数调用。第一个是原始的未计算表达式。二是评价结果。在你的例子中,第二个AppendTo正在使用第一个参数,因此您会看到未计算的表达式。改变# to #2然后你就会看到你期望的结果。

另请注意,第二个参数是not包装成HoldForm(尽管有文档),所以一般来说,必须小心使用一个保存其参数的函数fp论证以避免产生虚假的评估。

比较 Trace 和 TraceScan

的行为TraceMathematica 8 文档 http://reference.wolfram.com/mathematica/tutorial/TracingEvaluation.html。它指出,默认情况下,Trace只显示表情after头部和参数已被评估。因此,我们看到这样的序列:

In[28]:= SetAttributes[f, Orderless]
         Trace[f[a, 1]]
Out[29]= {f[a,1],f[1,a]}

仅显示输入表达式及其结果。这TraceOriginal选项控制(引用)“是否在计算头和参数之前查看表达式”。当该选项为True然后输出补充有头表达式和参数表达式:

In[30]:= Trace[f[a,1], TraceOriginal->True]
Out[30]= {f[a,1],{f},{a},{1},f[a,1],f[1,a]}

新列表的第一个元素是原始表达式before头部和参数被评估。然后我们看到头部和参数正在被评估。最后,我们看到顶级表达式again,在对 head 和参数进行求值之后。列表的最后两个元素与原始跟踪输出的两个元素匹配。

正如链接文档所述,Trace对于返回的表达式非常有选择性。例如,它完全省略了琐碎的评估链。TraceScan是全面的,并且为每个评估(无论是否琐碎)调用所提供的函数。您可以使用以下内容查看全面的评估集TraceScan表达:

TraceScan[Print, f[a,1], _, Print[{##}]&]

下表与生成的输出相匹配Trace有和没有TraceOriginal,以及输出TraceScan表达:

Trace   Trace    TraceScan
        Original

        f[a,1]   f[a,1]
                 f
        {f}      {f
                 ,f}
                 a
        {a}      {a
                 ,a}
                 1
        {1}      {1
                 ,1}
                 f[1,a]
                 {f[1,a]
                 ,f[1,a]}
f[a,1]  f[a,1]   {f[a,1]
f[1,a]  f[1,a]   ,f[1,a]}

鉴于该表的内部结构,对于哪个条目与哪个条目匹配存在一定程度的猜测Trace无法访问。进一步的实验可能会提供调整对齐的信息。然而,关键的一点是,所有由Trace可以使用TraceScan -- and TraceScan提供更多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解跟踪* 的相关文章

随机推荐

  • 针对 Google IAP 使用 Salesforce 命名凭据

    Goal 我已经构建了一个在 Google App Engine 上运行的 REST API 受保护谷歌云应用内购买 https cloud google com iap 身份感知代理 我的目标是使用服务帐号 https cloud goo
  • PHP 递归文件夹扫描按修改日期排序

    我正在使用此脚本查看所有子文件夹和子文件夹的文件 function readfolder dir global tfile tdir i 0 j 0 myfiles myfiles array if is dir dir if dh ope
  • 在 Fabric.js 中真正旋转等边三角形的中心

    使用 Fabric js 我无法真正围绕其中心点旋转三角形 或者至少我认为应该是中心点 我创建了一个jsFiddle http jsfiddle net UW8Be 这表明 三角形很简单 我用了originX center 原点Y 也是如此
  • 将 Typeahead 与 Google 自定义搜索引擎结合使用

    我正在尝试让 Twitter Typeahead Bloodhound 与 Google 的 CSE 配合使用 到目前为止 我已经成功返回结果 但无法计算出 datumTokenizer var results new Bloodhound
  • SSIS 错误 - 无法执行事务操作,因为有正在处理此事务的待处理请求

    在执行 ssis 包时 出现以下错误 The transaction operation cannot be performed because there are pending requests working on this tran
  • Excel - 从单元格范围创建图表,同时排除空值?

    我有这张 Excel 工作表 其中基本上包含大量数据 现在 此 Excel 工作表通过导入数据的宏动态更新 因此数据可能会发生变化 这意味着某些单元格可能会被填充 而其他单元格则不会 所以我在工作表 2 中从 A2 A60 到 M2 M60
  • 如何更改TTLauncherItem中标题的颜色?

    我在尝试更改 TTLauncherItem 中的颜色时遇到很多麻烦 因为默认的灰色不适合我的背景 有任何想法吗 这是我用来更改文本颜色的TTLauncherItem从默认的灰色变为黑色 在白色背景上看起来更好 1 创建一个继承自的样式表TT
  • 如何更改诺基亚全触摸 lwuit 表单标题颜色

    我想更改基于诺基亚 lwuit 的全触摸表单的标题颜色 我尝试过 setTitleComponent 方法 但它不起作用 另请检查以下链接http projects developer nokia com LWUIT for Series
  • 有没有像 Haskell 的 Threadscope 这样的 C/C++ 线程跟踪器?

    有没有像这样的免费开源工具线程范围 http research microsoft com en us projects threadscope 并且比NPTL 追踪工具 http nptltracetool sourceforge net
  • 从 SQL Server 查询 Python 中的二进制值

    我正在执行这个查询 SELECT CMDB ID FROM DB1 dbo CDMID 当我在 SSMS 18 上执行此操作时 我得到以下信息 我知道这些是十六进制值 尽管我不是该主题的专家 我需要在 python 上执行这个精确的查询 以
  • 在python中逐层打印二叉树

    我想按以下方式打印二叉树 10 6 12 5 7 11 13 我已经编写了用于插入节点的代码 但无法编写用于打印树的代码 所以请帮忙解决这个问题 我的代码是 class Node def init self data self data d
  • 让 Graphstream 只渲染发生变化的部分

    我使用以下方法创建了一个表示特定区域路线图的图表Graphstream 现在我想让蓝色节点看起来像在图表上移动 为此我在另一个线程上显示图表 并且每秒将不同的节点着色为蓝色 如下所示 public void drawGraph List
  • Git lfs(大文件存储)表示 lfs 管理的文件在 git lfs pull 后被修改

    我有一个存储库的工作副本 它使用 git lfs 来存储一些大文件 我安装了 git lfs 二进制文件 但可能没有在工作副本中运行 git lfs install 当我想在添加 lfs 文件后更新本地工作副本时 我执行以下命令 git p
  • C:scanf循环

    char buf 1024 0 send a message if status 0 while 1 printf Enter message scanf 1023 n buf fflush stdin if strcmp buf quit
  • SQL Server 图形数据库 - 使用多种边类型的最短路径

    我已经对 SQL Server GraphDB 进行了研究 但到目前为止我发现的所有人为示例仅使用单个边缘表 总是如此Person friend of gt Person 例如 就我而言 我创建了数据中心中已部署软件组件的图表 并且存在不同
  • Android - 如何在启动后启动 /sdcard 上的应用程序

    有没有一种方法可以在启动后自动启动Android应用程序 如果它位于Android应用程序上 sdcard 好吧 大概是通过BroadcastReceiver 但哪种行动是正确的呢 ACTION BOOT COMPLETED does no
  • Html.ActionLink 无法动态调度

    我的 MVC3 有问题 我正在尝试使用 Html ActionLink 为我的博客项目中的标题生成链接 在中使用常量字符串ActionLink效果很好 但如果我使用Posts Title 当前帖子模型的标题被循环 我得到这个异常 CS197
  • 如何减少flutter web应用程序的加载时间

    截至目前 我们可以将 flutter web 应用程序作为单个文件启动 该文件将立即加载 因此需要花费大量时间和带宽来加载 这并不理想 有没有办法一次只加载一个页面 而不是整个网络应用程序 我的意思是 一次加载一个小部件 任何建议将不胜感激
  • 卡夫卡高级消费者 error_code=15

    当尝试使用高级消费者 使用全新的消费者组 从 Kafka 进行消费时 消费者永远不会开始运行 当我将日志记录级别切换为调试时 我可以看到以下两行一遍又一遍地重复 DEBUG AbstractCoordinator 09 43 51 192
  • 了解跟踪*

    再会 当试图理解数学使用标准的评估顺序Trace and TraceScan最近开发的命令及其漂亮的视觉表示thread https stackoverflow com questions 5459735 the clearest way