Haskell

Haskell 13: Listas Intencionales Dobles

20 videos

111 minutos

Hola mundo ¿Cómo están? Mi nombre es José y les doy la bienvenida a este nuevo tutorial del curso de Haskell donde vamos a aprender hoy cómo combinar diferentes listas intencionales. Así que bueno después de ver la estructura de una lista intencional en el vídeo anterior. Hoy vamos a ver un poco cómo podemos hacer para combinar varias. Así que, en primer lugar, me voy a crear aquí, mi lista

y voy a explicar un poquito como es la combinación. La estructura es la misma de siempre, que ya hemos visto, eh, lo separamos con esta barra horizontal y aquí ponemos, la lista y aquí, después, con comas la condición y después lo que queremos mostrar; ya ustedes esto lo vieron lo único que esta vez, qué si antes poníamos aquí una lista, pues aquí pondremos dos listas. Así, por ejemplo, me voy a crear una lista,

, a la que los elementos los voy a llamar X y en esta lista lo que voy a crear son todos los números, del 1 al 20, por ejemplo y en esta otra lista, lo que voy a tener aquí ahora, son los números del 1 al 100 y ésta lista, los números les voy a llamar con la letra Y. Así que le pongo así con la misma estructura, con la flechita. ¿Bien?, entonces, ¿Qué tengo aquí?, pues, tengo por un lado una lista del 1 al 20 con X

y otra del 1 al 100 con la Y. Y, ahora aquí ya le pongo las condiciones, lo que voy a hacer es: coger de la lista primera de X siempre que X sea menor que 10; así que voy a poner mientras X sea menor que 10, así que cogeremos del 1 al 9 y por otro lado, con comas, separamos las condiciones, por otro lado, voy a coger de Y, los números que sean divisibles por 10; es decir, el 10, 20, 30, 40,

solamente esos nada más que los múltiplos de 10, así que, voy a poner aquí así que, el resto entre 10 sea 0, así que que sean múltiplos de 10. Y que voy a hacer aquí ahora, una vez que tengo estos, voy a sumar X + Y; así que me saldrá, pues, el 1 con el 10 me saldrá 11, el 1 con el 20 me saldrá 21, el 1 con el 30, 31. Así es como me saldrá, lo ejecuto, ¡Hey!, perdón, me falto aquí, separar este elemento, ahora si lo ejecuto

Las dos listas, van separadas con una coma, para separar una lista de la otra y ahora, cuando hago lista ahí tienen, lo que ya les he dicho antes el 1 con el 10, 21 … 11; 1 con 20, 21; el 1 con el 30, 31, con el 40, así hasta el 90 y hasta el 100, 101. Ahora con el 2, porque, ya estamos recorriendo esta lista, éste, el 1 con el 10, el 1 sale de esta lista del X y el 10 sale de esta lista, de la Y

y ahora, una vez que hemos recorrido todos los 1’s, avanzamos al 2 y nos sale, el 2 otra vez, con todos los elementos Y’s, el 2 con el 10, 12; el 2 con el 20, 22; así con todos los 2’s, y después, comenzamos con los 3’s, comenzamos con los catorces. Así sucesivamente hasta el 9; que llegamos acá, ahí lo ven ¿No? Así que, bueno, pues, esta es la forma de combinar listas unas con otras, es cuestión de poner cada lista separada con comas;

no como hice yo antes, separar con coma, nombrarlas y poner las condiciones,y después ¿Qué queremos hacer con esos elementos de la lista? Es algo muy sencillo bueno en este ejemplo, pues, he hecho esta operación que quizás no tenga mucha lógica, pero es para que ustedes vean; ahí ustedes entienden. Entonces, ahora lo que vamos a hacer es, ya que hemos visto listas intencionales simples y combinaciones de listas. Pues, vamos a ver un poco la lógica

que tienen estas cosas y que podemos hacer con ello, por ejemplo, aquí en este fichero de Haskell.hs; pues me voy a crear…, voy… vamos a desarrollar una función que nos calcule la longitud de la lista, que esto, de aquí, pues, ustedes ya saben cómo es: si yo aquí pongo el length de lista, me sale que aquí hay 90 elementos en total; si sumo todos los números que se han producido salen 90 elementos.

Entonces, nos vamos a hacer nosotros una función propia; desarrollada por nosotros, qué nos diga cuántos elementos tiene una lista. ¿Qué sucede? Ustedes aquí, cuando ejecutan esto o cualquier otra lista intencional, que hemos visto, has visto en los videos anteriores, como ejemplos, siempre lo que me devuelve, siempre es una lista, aquí ustedes lo ven, ósea, la lista intencional me devuelve una lista.

Entonces aquí, vamos a crear una función que se va a llamar longitud que va recibir como parámetro una lista lógicamente y ahora nosotros le vamos a tener que decir pues, cuántos elementos hay en esa lista; entonces, ¿Cómo hacemos eso? Bueno, pues vamos a pensar entonces un poco. Estamos diciendo que toda lista intencional me devuelve una lista, de modo que, si yo aquí me pongo mi estructura y pongo la lista que recibo,

todos los elementos de la lista, que voy a llamar Xy ahora aquí, en lugar de mostrarX, lo que voy a mostrar por cada elemento, en lugar de mostrar X, lo que voy a mostrar es un 1. ¿Bien? Así que, sea lo que sea, lo que aquí hubiera, van a salir todos 1’s; De hecho, vamos a hacer aquí un ejemplo; si yo aquí pongo así, y pongo 1 de…, eh…, de lista; yo aquí pongo así, que los nombro X

y ahora, me van a tener que salir noventa 1’s, porque si hemos visto que hay noventa elementos, por cada elemento me va a producir un 1, ahí lo tienen ¿No? Noventa 1’s, ¿Bien? Entonces yo ahora con esto, como lo voy a dar por 1, que cada elemento me va a dar un 1, si yo aquí utilizamos una función que ya hemos visto en un video anterior, de operaciones con fun… con listas, si yo aquí pongo un sum, lo que hago es que; cada uno de estos elementos lo suma

¿Y qué es lo que me va a dar?, pues la suma de todos los elementos, ósea, me va a decir cuántos elementos hay. Porque va a sumar 90 1’s, me va a salir 90, que es la longitud de cada uno. Así que, yo esto, si aquí lo guardo, y yo aquí cargo el archivo Haskell.hs, uy, perdón; solamente es un punto con dos eles. Haskell.hs, compilo y ahora aquí llamo a la longitud, yo aquí… van a ver, yo aquí tengo lista;

Hey, perdón, vamos a crear la lista que van a ser todos los elementos que vayan del 1 al 30; yo aquí la muestro y eso es todo. Entonces, yo voy a llamar a la… a la función longitud y le voy a pasar la lista como parámetro. Llamo longitud lista y que da, un 30; que es lo mismo, qué si yo hubiera hecho el length de lista que es un 30, que es lo mismo, pero lo que ha hecho ha sido convertirme todos estos elementos en 1’s

y sumarlos por cada elemento puesto 1 me lo ha sumado ¿Bien?, bueno, pues, esto es una forma de combinar cosas que hemos visto antes, vamos a ver otro, ejemplo, lo vamos ahora aquí. Vamos a cambiar esta función, vamos a hacer otra función que se llame sacar, no mejor mostrarVocales y le vamos pasar una frase y lo que va a hacer aquí, es solamente, mostrar vocales, solamente y voy a poner aquí, que recibe una frase y ahora ¿Qué es lo que vamos a hacer aquí?

Pues vamos a mostrar, vamos a poner aquí la estructura para ir un poco viendo la secuencia de todo esto. Entonces, aquí cogemos la frase y de cada elemento de la frase de ésta lista, cada elemento, lo vamos a llamar letra ¿Bien? Entonces, aquí lo que vamos a hacer es, que solamente vamos a mostrar los elementos, sí letra es igual a la a o, otra condición, no perdón, perdón, si letra pertenece a la lista de vocales: a, e, i,

lo voy a poner así para que se vea, o y u. Antes iba a hacer, si letras es igual a a, o letras es igual a e, es igual a i, pero no es posible porque nunca una letra va a ser igual a todas, así que, lo tengo que hacer de esta manera ¿No? Si aquí yo pongo, como condición, letra, igual a la a y otra condición, que además cumpla, también esta condición, letra igual a e. Pues esto no es posible porque nunca

se van a poder cumplir todas estas condiciones o es una cosa o es otra; así que esto, que iba a hacer antes me he dado cuenta de que estaba mal, tiene que ser de esta forma ¿No? Metiendo, comprobando, que letra pertenezca a este conjunto, a esta lista y ahora lo que voy a mostrar; simplemente es, letra. La letra, que cumpla con esta condición, así que, de toda la frase, letra por letra, analizamos cuál es una vocal y la vocal se muestra,

voy a guardar, aquí recargo el archivo y me da un error. Así que, bueno, voy a ver que…que, que error puede haber aquí; ah ya aquí, no puse una coma, para separar para separar esto, entonces ahora sí, guardo recargo y ahora sí que no va a haber ningún problema y ahora ya, le vamos a llamar a esta función mostrarVocales y, bueno, hemos dicho que tengo que pasar una lista ¿Verdad? Así que yo podría pasar una lista, así, como estamos viendo.

Puedo pasarle así una lista y me sale la O y la A, pero recuerden, que las cadenas de texto son consideradas ya como listas en sí. Entonces, yo, si aquí pongo: hola mundo, pues simplemente no tengo que escribir todos los corchetes, poner entre comillas me sale las vocales. La O, la A, la U y de nuevo la O ¿Bien? Entonces, con esta función que yo me acabo de crear, pues puedo sacar las vocales, puedo sacar cuántas consonantes hay,

cuántas letras son la letra A, la letra B, eso todo lo puedo hacer ¿No? Si yo aquí digo, vamos a una frase, que me saque, cuántas letras son la C. Yo aquí le doy a recargar y ahora aquí, mostrar, bueno, je; mostrarVocales no, vamos a llamar, que se llame, mostrarC, entonces yo aquí entonces, lo que voy a hacer es recargar; digo mostrarC y le paso una frase: la casa es cara, tiene dos ¿No? Me van a salir dos ¿Cierto?

Entonces, yo ahora lo que podría hacer es: combinar un poco lo que hemos hecho antes ¿No? Así que, yo ahora puedo hacer aquí, otra función que se llame sumarC, que sea igual a una lista. Bueno, que lo que voy a hacer, es que, esta función reciba una…, una, una cadena, una cadena de C, de C’s y lo que voy a hacer es sumar, como hemos hecho antes, cada elemento lo vamos a convertir en uno, y aquí lo que vamos a hacer es, llamar a mostrarC

pasándole como parámetro esa frase ¿No? Entonces si yo aquí pongo, mostrarC y le mando la frase ¿No? Lo que tendría que hacer en este caso es llamar a sumarC, pasarle la frase, pasarle la frase en sí. Entonces, esta frase de mostrarC, esta frase, cuando se la pase a mostrarC, , me la va a devolver, solamente filtrándome las cadenas; me va a devolver una cadena filtrada, solamente con las C’s y ahora, cada este elemento de la cadena,

si yo aquí; cada elemento de la cadena, lo convierto; lo voy a llamar X,para llamarlo de alguna forma y lo transformo en uno, y me lo suma, me va a decir cuántas C’s, tiene la frase. Yo esto lo cargo, aquí recargo y ahora lo que tengo que hacer es llamar a sumarC y le voy a poner: la casa es cara y me sale que hay dos C’s ¿Entienden? Ósea, aquí hemos hecho dos funciones: en una simplemente nos devuelve una lista,

con las C’s que hay que son éstas ¿No?, y en la otra, lo que hacemos es, lo que hemos hecho antes, es utilizando esa idea, transformar esto en unos y sumarlos; y así sabemos cuántas C’s hay. Yo esto lo puedo hacer para cualquier letra, ¿No?, vamos a, no voy a cambiar los nombres a las frases, a las funciones, pero, aunque le digamos sumarC,pero bueno, vamos a, a hacerlo como si fueranA’s¿No?

Yo ahora aquí, vamos hacer lo siguiente, yo esto lo recargo y ahora, vamos al, aunque sea sumarC, pero en realidad va a contar cuánta A’s. Yo aquí, le pongo: tengo una manzana que está muy rica. Cuántas A’s hay: 1, 2, 3, 4, 5, 6. Le doy y me dice que tengo seis A’s, vieron. Bueno, esta es la forma de combinar, eh, ya hemos visto cómo combinar distintas listas intencionales en el principio del vídeo

y cómo hacer, funciones de listas intencionales y combinar funciones unas con otras, para ir consiguiendo diferentes cosas; que queramos conseguir. Espero que les estén gustando estos vídeos, son muy interesantes, ya vieron un poco, que la estructura de Haskell, no es tanto basándose en variables sino que tienen, el peso de la información recae en las funciones y tenemos que ver cómo reutilizar una función con otra,

para cumplir lo que nosotros estamos persiguiendo. Bueno, pues, pueden darle a like, suscribirse y compartir estos vídeos, espero que les gusten y en los siguientes tutoriales veremos más cuestiones. Les mando un saludo.

Si quieres enterarte de los nuevos cursos, suscríbete. No habrá spam, prometido :)

Sobre el autor

foto de jotajotavm
José Javier Villena

jotajota pa los amigos y jota pa los de más cnfianza.

Bio Seria: Analista-Programador en diferentes lenguajes. Tutor PREMIUM de reconocidas plataformas de nivel mundial como CodigoFacilito. Redactor de artículos para Cristalab. Mi canal de YouTube está patrocinado por la editorial ANAYA y LaTostadora. Me gusta explicar con detalle y poner varios ejemplos para que no queden dudas.

Bio Molona: Me presento :) soy informatico, ni frostis d hardware pero muy muxo de programacion, friki a medias o del to segun el dia. Me gusta programar, muxo. Manejo varios lenguajes y tdo lo ke sepa lo comparto x amor al arte. Este no es mi trabjo pero lo ago mejor y con +ganas y calidad que si lo fuera, x eso mismo, xq para mi es divertido. Solo spero al menos algo de agradecimientO!! ;)

Dios, qe gusto haber escrito este parrafo cm me a dao la gana sin pensar en ortografia ni tildes ni historias!!!!!