En idiomas como Prolog, Erlang y algunas versiones anteriores de Fortran, casi tiene que hacer esto, por razones completamente diferentes.
Prolog/Erlang no tienen asignación de variable, tienen unificación. IIRC, si X es una variable, el código siguiente 2 = X
, o X = 2
se procesa si X puede tener el valor 2. Entonces, si X ya está unificado con un valor, entonces ese valor debe ser 2, y si no, X se convierte en 2 de luego encendido. Así que escribir 3 = 3
está bien - debería convertirse en no-operativa, y 2 = 3
siempre falla, ya sea una falta de coincidencia en Prolog o (creo) un error de tiempo de ejecución en Erlang. Los números se comportan como variables que ya se han unificado con el valor que representan los números.
En Fortran temprano (se disculpa por no haber usado fortran en veinte años y olvidar su sintaxis), todos los argumentos de funciones se pasaron por referencia, por lo que si tiene una función equivalente a void foo (int &x) { x = 3; }
y la llamó con un número, el compilador almacenaría el número en una variable estática y lo pasaría. Entonces, llamar foo (2)
establecería ese valor almacenado estático de 2 a 3. Si sucediera usar la misma variable estática para el literal 2 en alguna otra parte, como llamar a otra función con el literal 2
, entonces el valor pasado a la segunda función sería 3 en cambio.
Para que pueda tener variables que son sintácticamente idénticas a los números, siempre que se inicialicen automáticamente al valor del literal. Pero si permites que sean variables mutables y más bien puras, la rareza abunda.
tal vez porque entonces sería posible escribir, por ejemplo 2 = 3 :) – Ozzy
En muchos idiomas esto no es una opción (no _debe_) - es ilegal iniciar un nombre de variable con un número. – Oded
@Oded: Por favor dígame el verbo adecuado para reemplazar con "should" .my English no es tan bueno :) –