内部使用的符号$
是什么?
我不是指复合形式为x$388
或$5
等,而只是$
本身。
我想知道这是否是用于表示法的有效对象,或者如果我这样做会破坏。
答案 0 :(得分:4)
将用户变量以奇数个$字符结尾(不计算第一个字符)是不明智的。 x $,y $$$和$$都是变量名称的不良选择。
这是因为将奇数个$附加到标识符是一种称为“词法重命名”的技术,当高阶函数返回使用相同变量名的函数时,Mathematica内核使用该技术来避免变量名中的冲突。父母。该技术用于各种范围构造,包括Function,Module,With和Rule;这是功能:
的示例In[1]:= f = Function[{x, y}, Function[{x}, x+y]]
Out[1]= Function[{x, y}, Function[{x}, x + y]]
In[2]:= f[2,3]
Out[2]= Function[{x$}, x$ + 3]
In[3]:= ?*`x$
Global`x$
Attributes[x$] = {Temporary}
简而言之,附加$ characters是一种系统内部重命名机制,Mathematica将此表单的标识符识别为具有Temporary属性的$ -less表单的“词法重命名”版本。不建议在您自己的代码中使用此表单的变量。
Mathematica是一种术语重写语言,可以通过使用内部重写机制(如“词法重命名”)来表现为词法范围的函数式语言。
答案 1 :(得分:2)
在版本7中,符号System`$
以前已经在一个新内核中创建了,但据我所知,并没有用于任何东西。在版本8中,未预先创建符号$
:
In[1]:= Context["$"]
During evaluation of In[1]:= Context::notfound: Symbol $ not found. >>
Out[1]= Context["$"]
我同意Szabolcs在$
上下文中使用System
的代码在将来版本中可能会中断,以及修改系统符号的任何其他代码。