用於內部的符號$
是什麼?
我不是指化合物形式x$388
或$5
等,只是$
本身。
我想知道這是否是一個有效的對象在符號中使用,或者我會打破,如果我這樣做。
用於內部的符號$
是什麼?
我不是指化合物形式x$388
或$5
等,只是$
本身。
我想知道這是否是一個有效的對象在符號中使用,或者我會打破,如果我這樣做。
在7版本,符號System`$
用於在新的內核已經建立,但據我所知,不用於任何東西。在8版本,符號$
沒有預先創建:
In[1]:= Context["$"]
During evaluation of In[1]:= Context::notfound: Symbol $ not found. >>
Out[1]= Context["$"]
我會Szabolcs該代碼使用$
在System
方面在未來的版本可能會斷裂,以及該修改系統符號任何其他代碼一致。
薩沙,你有可能得到更確切的答案嗎?如果在版本8中它被作爲受保護的符號去除,那麼事情可能會以另一種方式進行。也就是說,而不是打破未來的版本,在未來的版本中安全嗎? – 2011-05-11 10:48:06
以奇數個$字符結尾的用戶變量(不包括第一個字符)是不明智的。 x $,y $$$和$$都是變量名稱的不好選擇。
這是因爲追加奇數個$到一個標識符是一種稱爲「詞法重命名」的技術,Mathematica內核用來避免變量名稱發生衝突,當高階函數返回的函數使用相同的變量名稱他們的父母。該技術用於各種範圍構造,包括功能,模塊,配合和規則;這裏是函數的一個例子:
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}
總之,追加$字符是一個系統內部重命名機制,這種形式的標識符由數學認定爲「詞彙改名」的$稀少形式的版本,與臨時屬性。不建議在你自己的代碼中使用這種形式的變量。
Mathematica是一種術語重寫語言,通過使用諸如「詞法重命名」等內部重寫機制,可以表現得像詞彙範圍的功能語言。
正如我的問題所述,我對你所描述的複合形式不感興趣,而是想知道如何使用'''符號本身。 – 2011-05-11 09:20:01
您確定以'$'結尾的標識符是否以特殊方式由* Mathematica *處理?我認爲「詞法重新命名」版本和$無形式之間的唯一區別在於前者在* Mathematica *創建時獲得'Temporary'屬性。有趣的是,爲這些符號賦值甚至不會破壞任何東西:'x $ = 5; f =函數[{x,y},函數[{x},x + y]]; f [2,3] [0]'。 – 2011-05-11 10:43:55
但請注意,如果您在範圍構造中使用,則可能會發生意外名稱衝突:'In [1]:= f = Function [{x,y},Function [{x},x $ + y]]' 'Out [1] = Function [{x,y},Function [{x},x $ + y]]''In [2]:= f [1,2]''Out [2] = Function [ x $},x $ + 2]'函數參數x被重命名爲x $,這使得它與函數體內的(假定爲非綁定的)變量x $相同。 – librik 2011-05-11 10:48:34
WR使用它來爲其客戶收費。哦...好吧,我的幽默之前曾受到批評。 – 2011-05-11 00:00:45
是的,它本身就是一個有效的標識符......並且它似乎不存在於路徑中的任何上下文中。 ''*''$'只在新內核中給出'Compile \'$'(受保護),但並不是所有的符號在內核啓動後都被加載。無論如何,我會說使用它會招致麻煩。 – Szabolcs 2011-05-11 00:40:54
爲了澄清,$可以是標識符名稱的一部分,就像任何字母數字字符一樣。但你很可能知道這一點。 – Szabolcs 2011-05-11 00:44:01