gpt4 book ai didi

wolfram-mathematica - 为什么我要评估两次?

转载 作者:行者123 更新时间:2023-12-04 07:53:08 25 4
gpt4 key购买 nike

我不明白为什么我必须对这个任务进行两次评估(在 Mathematica 7 中)。

第一次评价:

Unprotect[Rule];
Attributes[Rule]
pp = Plot | LogLinearPlot | ListPlot | ParametricPlot3D;
(h : pp)[True -> False] ^:= Print["Irrelevant data"]

(*

Out[2]= {SequenceHold}

During evaluation of In[1]:= UpSetDelayed::write: Tag Rule in (h:Plot|LogLinearPlot|ListPlot|ParametricPlot3D)[True->False] is Protected. >>

Out[4]= $Failed

*)

Out[2]= {SequenceHold}可以看出, Unprotect[Rule]工作,但错误消息另有指示。如果我第二次评估该单元格,则会进行分配并且不会产生错误。

为什么会发生这种情况?

最佳答案

您可能很清楚,Mathematica 加载实现其某些功能的二进制 MX 文件。这些 MX 文件存储实现以及定义和属性。

这是阴险的,但您的 Unprotect[Rule]由 Mathematica 新加载的 MX 文件撤消,这解释了为什么它第二次工作。因为 Mathematica 已经加载了它需要的所有 MX 文件。

如果您首先计算表达式中的所有符号,它就会停止提示:

{Unprotect, Rule, Attributes, Plot, LogLinearPlot, ListPlot, 
ParametricPlot3D, True, False, Print};
Unprotect[Rule];
Attributes[Rule];
pp = Plot | LogLinearPlot | ListPlot | ParametricPlot3D;
(h : pp)[True -> False] ^:= Print["Irrelevant data"]

编辑 在取消保护之前,需要进行第一次评估以触发所有自动加载 Rule .

关于wolfram-mathematica - 为什么我要评估两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5649379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com