Translate

martes, 9 de junio de 2020

Datos de Erlang: números y atoms

En Erlang tenemos  diferentes tipos de datos con los que podemos calcular. Tenemos números, atoms, booleanos, tuplas, listas y tipos compuestos. Además tenemos strings y funciones. Erlang es débilmente tipado por lo tanto no estamos obligados a decir qué tipos tomará una función. Puede tomar algo de cualquier tipo.

Entonces, comencemos mirando los números. Los números en Erlang pueden ser enteros y flotantes.  Los enteros bignums son números arbitrariamente grandes, números de precisión completa solo por defecto. Entonces, por ejemplo, puedes ver una gran cantidad de potencias de diez multiplicadas juntas. Pero también tenemos floats. Podemos usar diferentes bases, escribimos números a través de una base diferente poniendo la base seguida por un hash seguido inmediatamente por el número en esa base. Entonces, si escribimos dos hash uno cero cero, obtenemos el número cuatro. Si escribimos tres hash tres cuatro, obtenemos un entero ilegal porque, por supuesto, el dígito tres, el dígito cuatro no es un número legal base tres. Tendría que consistir en los dígitos cero, uno y dos. Entonces puedes usar esas diferentes bases. En particular, podemos usar hexadecimal y octal, etc. Tenemos todos los operadores habituales. .

Entonces, si escribimos 12 div 5, obtenemos la respuesta 2. Si escribimos 12.0 div 5, obtenemos un error de excepción porque lo que hemos hecho es invocar una operación entera en flotantes. Y eso es típico de Erlang. Estamos obteniendo un error de tiempo de ejecución. Así que podríamos escribir algo así en un archivo dentro de una definición de Erlang. Solo causaría un error en tiempo de ejecución. Entonces, los números son muy parecidos a los números en otros lenguajes, excepto que tenemos bignums y podemos usar diferentes bases.

Los átomos son datos que simplemente se representan a sí mismos. Entonces, si evalúo el átomo foo, que obtengo escribiendo una cadena que comienza con una letra minúscula, la respuesta es foo. No significa nada más. No es una variable. Es simplemente un dato que dice foo. Y, en general, puedo encerrar cualquier cadena de caracteres entre comillas simples. Y eso será un átomo. Entonces los átomos simplemente se representan por sí mismos. Ahora, el único cálculo que podemos hacer con los átomos es que podemos compararlos para la igualdad.

Para poder  ver que si foo es igual a sí mismo y no es igual a 'I am an atom', podemos ordenarlos. Así que foo es mayor que el átomo  'I am an atom' , dado el ordenamiento lexicográfico basado en los códigos ASCII de los caracteres.

La otra forma de comparar Atoms en por patterns matching.