Generadores y listas por compresión


En matemáticas se emplea la notación comprimida para describir un subconjunto de números, en haskell esta notación se puede emplear para construir listas, para ello se emplea la

siguiente notación:

Esta notación puede implementarse de distintas formas, veamos el siguiente ejemplo, en el que la usamos para generar una función que genera los números desde 1 hasta n.

Como podemos observar, hemos creado una función numerar que acepta un valor de tipo entero y devuelve una lista de tipo entero, la función es igual a una lista de X, tal que (|) X toma los valores (<-) de 1 hasta n. En la ejecución de la función, que podemos ver en la parte superior de la imagen, vemos que al darle como parámetro el numero 5, la función genera los valores del 1 al 5.

Pero la sintaxis de  esta notación, puede ser modificada de diferentes formas, para generar listas en las que cada elemento esta formada por un par o mas de datos, como en el siguiente ejemplo, en el que generamos combinaciones de pares de datos que en la variable x, can del 1 hasta n, y en la variable y valores del 1 al 10

También podemos realizar operaciones con la lista de datos que produce el generador, como en el siguiente caso, en que generamos la lista de los cuadrados desde 1 hasta n

 

La siguiente forma de esta sintaxis, es incorporar un guardián, es decir una expresión que será evaluada para cada elemento de la lista, como en el caso siguiente, en el que estamos limitando la lista de resultados a aquellos en los que el resultado sea menor de 50, con lo que la ejecución de nuestra función modificada se suspende al obtener valores mayores a dicha cantidad.

 

 

 

 

 

 

Anuncio publicitario

¿Qué estas pensando?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.