lunes, 5 de febrero de 2024

Invariables en Erlang


Hacer aritmética está bien, pero no llegarás muy lejos sin poder almacenar los resultados en algún lugar. Para eso, usaremos variables. Las variables no pueden variar en la programación funcional. El comportamiento básico de las variables se puede demostrar con estas 7 expresiones (las variables comienzan con una letra mayúscula):

1> One.

* 1: variable 'One' is unbound

2> One = 1.

1

3> Un = Uno = One = 1.

1

4> Two = One + One.

2

5> Two = 2.        

2

6> Two = Two + 1.

** exception error: no match of right hand side value 3

7> two = 2.

** exception error: no match of right hand side value 2


Lo primero que nos dicen estos comandos es que puedes asignar un valor a una variable exactamente una vez; entonces puedes 'fingir' asignar un valor a una variable si es el mismo valor que ya tiene. Si es diferente, Erlang se quejará. Es una observación correcta, pero la explicación es un poco más compleja y depende del operador =. El operador = (no las variables) tiene la función de comparar valores y quejarse si son diferentes. Si son iguales, devuelve el valor:


8> 47 = 45 + 2.

47

9> 47 = 45 + 3.

** exception error: no match of right hand side value 48

Lo que hace este operador cuando se mezcla con variables es que si el término del lado izquierdo es una variable y no está vinculado (no tiene ningún valor asociado), Erlang vinculará automáticamente el valor del lado derecho a la variable de la izquierda. lado. En consecuencia, la comparación tendrá éxito y la variable mantendrá el valor en la memoria.

Este comportamiento del operador = es la base de algo llamado 'coincidencia de patrones', que tienen muchos lenguajes de programación funcionales, aunque la forma de hacer las cosas de Erlang suele considerarse más flexible y completa que las alternativas. 

La otra cosa que nos dijeron los comandos 1-7 es que los nombres de las variables deben comenzar con una letra mayúscula. El comando 7 falló porque la palabra dos tenía una letra minúscula al principio. Técnicamente, las variables también pueden comenzar con un guión bajo ('_'), pero por convención su uso está restringido a valores que no te interesan, pero sentiste que era necesario documentar lo que contienen.

También puedes tener variables que sean solo un guión bajo:

10> _ = 14+3.

17

11> _.

* 1: variable '_' is unbound


A diferencia de cualquier otro tipo de variable, nunca almacenará ningún valor. Totalmente inútil por ahora, pero sabrás que existe cuando lo necesitemos.

Nota: Si está probando en el shell y guarda el valor incorrecto en una variable, es posible "borrar" esa variable usando la función f(Variable). Si desea borrar todos los nombres de variables, haga f( )..

Estas funciones están ahí sólo para ayudarle durante las pruebas y sólo funcionan en el shell. Al escribir programas reales, no podremos destruir valores de esa manera. Poder hacerlo solo en el shell tiene sentido si se reconoce que Erlang es utilizable en escenarios industriales: es completamente posible tener un shell activo durante años sin interrupción... Apostemos a que la variable X se usaría más de una vez. en ese período de tiempo.



No hay comentarios.:

Publicar un comentario