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.