En matemáticas, una variable significa que puedes poner cualquier número allí, y una ecuación seguirá siendo cierta:
root(square(x)) = abs(x)
En lenguajes de programación, esto no es así: una var puede cambiar. En Python:
y = (x**2)**.5
x *= 2
assert y == abs(x)
generará una excepción, ya que x en la última línea no es la misma.
¿Hay lenguajes de programación que usan variables inmutables?
Respuestas:
Para responder a la pregunta del título "¿Algún lenguaje de programación usa variables como están en matemáticas?": C, C #, Java, C ++ y cualquier otro lenguaje de estilo C usan variables en la forma en que se usan en matemáticas.
Solo necesita usar == en lugar de =.
Si tomo tu original
Entonces puedo traducir eso a C # directamente sin ningún cambio que no sea para la sintaxis.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Esto se evaluará como verdadero para cualquier valor de x siempre que x al cuadrado sea menor que el máximo para el tipo de datos que está utilizando. (Java será muy similar, pero creo que el espacio de nombres matemático es un poco diferente)
El siguiente bit no se compilará en C # porque el compilador es lo suficientemente inteligente como para saber que no puedo asignar el retorno de una operación a otra.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
La inmutabilidad no tiene nada que ver con esto. Todavía necesita asignar el valor en un idioma inmutable y es completamente posible que un idioma determinado elija hacer esto usando = como operador.
Para demostrar aún más el punto, este ciclo se ejecutará hasta que agote los valores legales de x y obtenga una excepción de desbordamiento:
Es por esto que los matemáticos odian el uso de = para la asignación. Les confunde. Creo que esto te ha llevado a confundirte. Toma tu ejemplo
Cuando convierto esto en álgebra, obtengo esto:
abs (2x) = raíz (x ^ 2)
Lo cual, por supuesto, no es cierto para valores distintos de 0. La inmutabilidad solo lo salva del error de cambiar el valor de x cuando agrega pasos adicionales entre la evaluación del lado izquierdo y el lado derecho de la ecuación original. En realidad, no cambia la forma en que evalúa la expresión.
fuente
Lenguajes de programación puramente funcionales, como Haskell , imponen variables inmutables. Sin embargo, me gusta llamarlos identificadores, en lugar de variables.
fuente
El
=
signo utilizado en los lenguajes de programación es engañoso.<-
, que significa "almacenar", o incluso COBOLMOVE
debería usarse en su lugar.Además, Prolog usa variables como las matemáticas: las variables no pueden cambiar, y el motor de Prolog completará las variables para ver si existen las soluciones.
Además, Curry es una mezcla de Haskell y Prolog.
fuente
C, C ++ y Objective-C pueden especificar la inmutabilidad para argumentos de función (y método), así como otras variables (identificadores), con el calificador de tipo "const".
fuente
También puede simular la inmutabilidad en Python al no permitir actualizaciones a las clases. Como se indicó anteriormente, la mayoría de los lenguajes de programación funcionales puros imponen la inmutabilidad. Clojure es una adición reciente a la plataforma JVM (Clojure es un dialecto LISP)
En Scala (también un lenguaje JVM ), un unificador de variables de soporte OO y FP declaradas con
val
son inmutables. La expresividad de Scala y el soporte híbrido OO / FP hacen que se parezca a Mathematica . ( Akka es un marco que agrega la funcionalidad Erlang OTP y Clojure como STM .. a Scala y Java.) LACASA agrega un sistema de tipos y un modelo de programación para imponer la disciplina de capacidad de objetos en Scala y proporcionar referencias de objetos únicas. ( código ) ( antecedentes teóricos )En Java, una variable declarada
final
es inmutable, y las bibliotecas de Java, como Google Guava, incluyen bibliotecas inmutables de colecciones. Los JavaString
s también son siempre inmutables.fuente