La ciencia avanza, y junto con ella, Perl. Vamos a ver en este tutorial como podemos aplicar un poco de mecánica cuántica en Perl, y los usos prácticos que le podemos dar a este nuevo conocimiento.
Un poco acerca de la materia
La interpretación básica de la mecánica cuántica, o física cuántica para algunos, dice que todas las partículas existen como un discontinuo infinito de probabilidades hasta el momento en que son observadas.
Por ejemplo, una partícula que es observada en un estado A, B ó C, puede considerarse que tiene un estado inicial en cual simultáneamente tiene A, B y C. De ésta manera podemos decir que tiene una superposición de todos los estados, y hasta el momento en que es observada es que elige alguno de ellos.
En este momento se está haciendo un desarrollo que se encuentra muy avanzado, en donde se busca la creación de qubits. Los qubits serán bits de información que contienen tanto el 1 como 0.
¿Mecánica Cuántica en Perl?
Damian Conway desarrolló un módulo al que llamó Quantum::Superpositions. Éste módulo simula partículas cuánticas en superposición.
El módulo agrega dos nuevos operadores a Perl: any() y all(). Estos dos operadores nos ayudarán a crear nuestras variables cuánticas.
NOTA: A partir de este momento llamaremos variable cuántica a las variables inicializadas con el módulo.
Por ejemplo, vamos a crear una variable cuántica con 3 números distintos:
use Quantum::Superpositions;
my $i_cuantica = any(2,4,6);
En este momento nuestra variable $i_cuantica es una variable cuyos posibles valores son 2,4 y 6, todo depende del observador.
Entonces podemos hacer lo siguiente:
if($i_cuantica == 6){
print "Seis";
}
Veremos que se despliega
Seis en nuestra pantalla, pues al momento de hacer el if la
variable $i_cuantica tomó el valor de 6, o por lo menos la simulación.
Pero que tal si hacemos lo siguiente:
if($i_cuantica == 2*2){
print "Verdadero";
}
Entonces nos dará Verdadero, pues nuestra variable cuántica también tiene un valor de 4.
Pero que pasa si hacemos nuestra variable cuántica con all:
my $all_cuantica = all(2,4,6);
En ese momento los ifs anteriores serán falsos pues no cumple con TODAS las equivalencias. Lo que sería verdadero sería lo siguiente:
if($all_cuantica == any(2,4,6)){
print "Verdadero";
}
Esto es porque $all_cuantica es una variable cuyo valor es igual a TODOS los valores, y un valor any() es equivalente a CUALQUIERA de sus valores. Por lo que las dos terminan siendo iguales, pero su funcionamiento es distinto.
¿Tu mente no logra comprender esto? Ummm... la magia de la mecánica cuántica.
Ejemplo Práctico
Podemos usar nuestras variables cuánticas para muchas cosas. A continuación pongo un ejemplo básico de lo que podrías lograr usando las variables cuánticas.
Digamos que tienes un listado de personas como el siguiente:
my %Personas = (
'Uriel' => { Nacionalidad => 'Mexicana', Edad => 21 },
'Esteban' => { Nacionalidad => 'Argentina', Edad => 23 },
'Pepe' => { Nacionalidad => 'Mexicana', Edad => 16 },
'Julio' => { Nacionalidad => 'Española', Edad => 25 }
);
Y digamos que quieres los nombres de las personas de nacionalidad Mexicana o Española que tengan una edad de 21 ó 25 años.
Entonces podemos hacer nuestra variable cuántica de la siguiente manera:
my $admitidos = all(Nacionalidad=>any('Mexicana','Española'),Edad=>any(21,25));
Y después hacemos nuestro loop por todas las personas:
while(my ($key,$val) = each %Personas ){
if($admitidos eq any(%{$val})){
print $key,"\n";
}
}
Lo cual desplegará de manera correcta:
Julio
Uriel
En este ejemplo puedes modificar la variable cuántica dependiendo del filtro que deseas poner.
Últimas Palabras
En el tutorial echamos un vistazo rápido al módulo Quantum::Superpositions, para más detalles acerca de lo que puedes lograr con el módulo, te recomiendo que leas su documentación:
http://search.cpan.org/search?query=Quantum%3A%3ASuperpositions&mode=all
Si no sabes que es la mecánica cuántica, te recomiendo que veas la película What the Bleep Do we Know?. Un excelente documental que te muestra las bases de la mecánica cuántica y algunas sorpresas más:
What the Bleep Do We Know!?