3 Stimmen

Wofür wird das Dollarzeichen $ intern verwendet?

Was ist das Symbol $ intern verwendet werden?

Ich meine nicht die zusammengesetzten Formen x$388 o $5 usw., nur die $ von selbst.

Ich frage mich, ob dies ein gültiges Objekt ist, um es in der Notation zu verwenden, oder was ich kaputt machen werde, wenn ich es tue.

4voto

librik Punkte 3669

Es ist unklug, Benutzervariablen zu verwenden, die mit einer ungeraden Anzahl von $-Zeichen enden (das erste Zeichen nicht mitgezählt). x$, y$$$$ und $$$ sind allesamt eine schlechte Wahl für Variablennamen.

Dies liegt daran, dass das Anhängen einer ungeraden Anzahl von $ an einen Bezeichner eine Technik ist, die "lexikalische Umbenennung" genannt wird und die der Mathematica-Kernel verwendet, um Konflikte bei Variablennamen zu vermeiden, wenn Funktionen höherer Ordnung Funktionen zurückgeben, die dieselben Variablennamen wie ihre Eltern verwenden. Diese Technik wird in einer Vielzahl von Scoping-Konstrukten verwendet, einschließlich Function, Module, With und Rule; hier ein Beispiel mit Function:

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}

Kurz gesagt, das Anhängen von $-Zeichen ist ein systeminterner Umbenennungsmechanismus, und Bezeichner dieser Form werden von Mathematica als "lexikalisch umbenannte" Versionen der $-losen Formen erkannt, mit dem Attribut Temporär. Es wird nicht empfohlen, Variablen dieser Form in Ihrem eigenen Code zu verwenden.

Mathematica ist eine Sprache zum Umschreiben von Begriffen, die sich durch interne Umschreibmechanismen wie "lexikalisches Umbenennen" wie eine lexikalisch skalierte funktionale Sprache verhalten kann.

2voto

Sasha Punkte 5874

In Version 7 wird das Symbol System`$

wurde bereits in einem neuen Kernel erstellt, aber soweit ich weiß, nicht für irgendetwas verwendet. In Version 8 wird das Symbol $ wird nicht vorab erstellt:

In[1]:= Context["$"]

During evaluation of In[1]:= Context::notfound: Symbol $ not found. >>

Out[1]= Context["$"]

Ich würde zustimmen mit Szabolcs diesen Code mit $ en System Kontext könnte in zukünftigen Versionen nicht mehr funktionieren, ebenso wie jeder andere Code, der System-Symbole verändert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X