- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
再会,
我之前认为 Mathematica 在当前 $Context
中创建了新符号在将输入字符串(分配给 InString
)转换为输入表达式(分配给 In
)的阶段。但是一个简单的例子打破了这种解释:
In[1]:= ?f
During evaluation of In[1]:= Information::notfound: Symbol f not found. >>
In[2]:= Names["`*"]
Out[2]= {}
In[3]:= DownValues[In]//First
InString[1]
Names["`*"]
Out[3]= HoldPattern[In[1]]:>Information[f,LongForm->False]
Out[4]= \(? f\)
Out[5]= {}
f
在
$ContextPath
尽管它已经在
In[1]
的定义中使用了.
$ContextPath
中不存在的符号进行定义。无需创建它们。这可能是使用
Symbol
避免符号创建方法的有趣替代方法。 :
In[9]:= ff := Symbol["f"]
Names["`*"]
Out[10]= {"ff"}
ShowStringCharacters->False
默认样式表 Core.nb 中输出单元格的设置并错过了
FullForm
DownValues[In]//First
的输出.中真符号
f
未用于
In[1]
的定义中正如我们也可以通过使用
InputForm
看到的:
In[1]:= ?f
DownValues[In]//First//InputForm
During evaluation of In[1]:= Information::notfound: Symbol f not found. >>
Out[2]//InputForm=
HoldPattern[In[1]] :> Information["f", LongForm -> False]
Symbol
的阶段。我们如何预防?
f
如
Symbol
但 Mathematica 将其转换为
String
无需创建新符号。这是
MakeExpression
的内置行为:
In[1]:= ?f
InputForm[MakeExpression[ToExpression@InString[1], StandardForm]]
During evaluation of In[1]:= Information::notfound: Symbol f not found. >>
Out[2]//InputForm=
HoldComplete[Information["f", LongForm -> False]]
$Line
在调用之前发生
MakeExpression
但新
Symbol
为
InString
创建和分配新值和
In
变量在调用后发生
MakeExpression
:
In[1]:= MakeExpression[My`boxes_,My`f_]/;!TrueQ[My`$InsideMakeExpression]:=Block[{My`$InsideMakeExpression=True},Print[$Line];Print[DownValues[InString][[All,1]]];Print[DownValues[In][[All,1]]];Print[Names["`*"]];MakeExpression[My`boxes,My`f]];
In[2]:= a
During evaluation of In[2]:= 2
During evaluation of In[2]:= {HoldPattern[InString[1]]}
During evaluation of In[2]:= {HoldPattern[In[1]]}
During evaluation of In[2]:= {}
Out[2]= a
$PreRead
和
$NewSymbol
通话时间:
In[1]:= $NewSymbol:=Print["Names[\"`*\"]=",Names["`*"],"\nDownValues[InString]=",DownValues[InString][[All,1]],"\nDownValues[In]=",DownValues[In][[All,1]],"\nName: ",#1,"\tContext: ",#2]&
In[2]:= a
During evaluation of In[2]:= Names["`*"]={}
DownValues[InString]={HoldPattern[InString[1]]}
DownValues[In]={HoldPattern[In[1]]}
Name: a Context: Global`
Out[2]= a
$Pre
在对
In
进行新赋值后执行制作并在创建所有新之后
Symbol
s 在当前
$Context
:
In[1]:= $Pre := (Print[Names["`*"]];
Print[DownValues[In][[All, 1]]]; ##) &
In[2]:= a
During evaluation of In[2]:= {a}
During evaluation of In[2]:= {HoldPattern[In[1]],HoldPattern[In[2]]}
Out[2]= a
In
variable .
Symbol
s 是在调用
$PreRead
后创建的,
MakeExpression
和
$NewSymbol
但在打电话之前
$Pre
.
最佳答案
关于编辑部分中的问题:不确定这是否是您的想法,但在前端 session 中,您可以使用 $PreRead
在解析阶段将符号保留为字符串。这是一种可能的黑客方法:
symbolQ = StringMatchQ[#, RegularExpression["[a-zA-Z$][a-zA-Z$`0-9]*"]] &;
ClearAll[keepSymbolsAsStrings];
SetAttributes[keepSymbolsAsStrings, HoldAllComplete];
$PreRead = # //. RowBox[{"keepSymbolsAsStrings", rest___}] :>
RowBox[{"keepSymbolsAsStrings",
Sequence @@ ({rest} //. x_String?symbolQ :>
With[{context = Quiet[Context[x]]},
StringJoin["\"", x, "\""] /;
Head[context] === Context])}] &;
Context[symbol_string_name]
检查),该符号才会转换为字符串。例如
In[4]:= keepSymbolsAsStrings[a+b*Sin[c]]//FullForm
Out[4]//FullForm= keepSymbolsAsStrings[Plus["a",Times["b",Sin["c"]]]]
keepSymbolsAsStrings
首先定义,以便创建此符号。这使它重新进入:
In[6]:= keepSymbolsAsStrings[a+b*Sin[c]*keepSymbolsAsStrings[d+e*Sin[f]]]//FullForm
Out[6]//FullForm=
keepSymbolsAsStrings[Plus["a",Times["b",Sin["c"],
keepSymbolsAsStrings[Plus["d",Times["e",Sin["f"]]]]]]]
symbolQ
功能 - 为了举例,我只使用一个头脑简单的功能。
Needs
,以类似于预处理阶段的方式在字符串级别修改源,并有效调用
Needs
在修改后的源上。但是字符串级别的源代码修改通常很脆弱。
ClearAll[keepSymbolsAsStrings]
来修改上面的代码至
ClearAll[keepSymbolsAsStrings, symbol]
和
StringJoin["\"", x, "\""]
来自
RowBox[{"symbol", "[", StringJoin["\"", x, "\""], "]"}]
跟踪结果表达式中的哪些字符串对应于转换后的符号。
MakeExpression
而不是
$PreRead
,正如@Alexey 所建议的:
symbolQ = StringMatchQ[#, RegularExpression["[a-zA-Z$][a-zA-Z$0-9`]*"]] &;
ClearAll[keepSymbolsAsStrings, symbol];
SetAttributes[keepSymbolsAsStrings, HoldAllComplete];
Module[{tried},
MakeExpression[RowBox[{"keepSymbolsAsStrings", rest___}], form_] :=
Block[{tried = True},
MakeExpression[
RowBox[{"keepSymbolsAsStrings",
Sequence @@ ({rest} //. x_String?symbolQ :>
With[{context = Quiet[Context[x]]},
RowBox[{"symbol", "[", StringJoin["\"", x, "\""], "]"}] /;
Head[context] === Context])}], form]
] /;!TrueQ[tried]
]
MakeExpression
的定义中打破无限递归.再举个例子:
In[7]:= keepSymbolsAsStrings[a+b*Sin[c]]//FullForm
Out[7]//FullForm= keepSymbolsAsStrings[Plus[symbol["a"],Times[symbol["b"],Sin[symbol["c"]]]]]
In[8]:= keepSymbolsAsStrings[a+b*Sin[c]*keepSymbolsAsStrings[d+e*Sin[f]]]//FullForm
Out[8]//FullForm= keepSymbolsAsStrings[Plus[symbol["a"],Times[symbol["b"],Sin[symbol["c"]],
keepSymbolsAsStrings[Plus[symbol["d"],Times[symbol["e"],Sin[symbol["f"]]]]]]]]
$PreRead
最终用户仍然可以使用。
关于wolfram-mathematica - Mathematica 何时创建新符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616966/
我刚刚创建了一个非常大的神经网络,尽管是在非常强大的硬件上,想象一下我的震惊和失望,当我意识到 NeuralNetworks 包中的 NeuralFit[] 似乎只使用一个核心,甚至没有发挥到最大能力
我想知道是否有办法在 Mathematica 中处理大文件? 目前我有一个大约 500Mb 的文件,其中包含表数据。 Import["data.txt","Table"]; 什么是替代方式? 最佳答案
Mathematica 是否支持为数学符号安装非 Wolfram 字体? 其他数学符号字体的例子包括最近发布的 STIX 字体、微软的 Cambria 字体、Latex 下使用的 Math Tim
这是一个简单的 WolframCloud computation : 当 0 Infinity]会显示正确答案,即Boole[0Infinity] 输出应该是Boole[0 Infinity] 顺便说
在 MATHEMATICA 中是否有一种快速简便的方法来截断十进制数,比如超过 4 位? 对于 N[1/6, 4],它四舍五入为 =1.6667。 我要你切到 1.6666。 谢谢! 最佳答案 f[x
我有一个等式(因为是 VBA 代码所以使用了括号) Y=(P/(12E((bt^3)/12))*A 我知道每个变量,但不知道“b”。有什么方法可以让 Wolfram Alpha“重新定义”(而不是求解
我找到了 Wolfram Workbench Mathematica 开发的良好环境。 然而,当我在 Mathematica 中编程时,我需要经常浏览帮助系统。 Workbench 提供了一个工具提示
问题 我正在查看 Wolfram's Mathematica 生成随机数的方法,发现它使用 Cellular Automata Rule 30 .其基本解释如下: 一个基本元胞自动机的演化可以完全用一
我需要对可变数量的集合的笛卡尔积求和。假设 f[...] 是一个多元函数,定义 p[A__set] := Module[{Alist, args, iterators,it}, Alist =
当鼠标光标在 Wolfram|Alpha 中的 2D 绘图上时,会出现一对灰线,帮助您读取 x 和 y 轴的坐标 . For example ,我将鼠标悬停在以下 Airy 函数图中的转折点之一上。
我正在 Mathematica 中生成一个双面板图形。底部面板在 y 轴上具有负值,这会导致该轴上的标签(使用 FrameLabel 生成)比顶部面板上的标签向左对齐,后者具有正值。我无法将面板连接到
我有几个在 Mathematica 中生成的表达式,我想将它们导出到外部 C 程序的源代码中。 “CForm”几乎可以满足我的要求,只是求幂表示为对 Power() 的调用。 .我的表达式只涉及小幂,
Wolfram 系统建模器有一个名为 "equation browser" 的函数, youtube 视频 here (at 20:58) 介绍了“方程浏览器”,我想知道Dymola是否有相同的功能,
我有适用于 Mac 的 Mathematica 8.0 和 Wolfram Workbench 2.0。我想使用 MUnit 对我正在创建的包进行单元测试,但我发现缺少有关 MUnit 的文档令人沮丧
我希望能够通过具有大量内存的计算机的命令行来处理 Wolfram 语言。这似乎很容易通过 GCP 实现。我会创建一个大实例,根据需要使用它,然后删除该实例。我很好奇,我将如何在 GCP 上安装和设置
给定字符串中符号的名称,如何多次为其赋值?例如,假设我想定义一个名称为 varname 的值的符号,并且我想为它分配一个值: varname = "foo" Symbol[varname]=5 这是行
我的笔记本中有类似以下内容。 test1[g_] := (g == 5); test2[g_] := (g == 6); tests={"test1", "test2"} ToExpression[#
我正在尝试学习一些 Julia,在阅读了几个小时的手册后,我编写了以下代码: ie = 200; ez = zeros(ie + 1); hy = zeros(ie); fdtd1d (steps)=
不确定我正在尝试做的事情是否有意义。我正在用mathematica 对一些代码进行原型(prototype)设计,有一天我希望用C++ 编写。我只能以 double 计算的环境(因为我使用的是 MS
我经常希望看到不在 FullForm 中的 Mathematica 图形对象的内部表示。但更具可读性 InputForm能够通过双击选择部分代码,并轻松将此代码复制到新输入 Cell .但默认Inpu
我是一名优秀的程序员,十分优秀!