Haskell

Haskell 04: Crear Funciones

20 videos

111 minutos

Hola, mundo, ¿cómo están? Mi nombre es José y te doy la bienvenida a este tutorial del curso de Haskell que estamos haciendo. En esta ocasión vamos a ver un poco cómo utilizar funciones que hemos creado en archivos externos de los cuales vamos a hacer la llamada. Así que aquí tengo mi archivo, que se llama haskell.hs Lo tengo en el mismo directorio desde dónde estoy ejecutando la terminal de Haskell que me viene con la instalación, ¿cierto? Entonces aquí lo que voy a hacer es:

voy crearme aquí una función y desde aquí voy a llamarla. Van a ver que es sencillo. Por ejemplo aquí, en Haskell, voy a crearme una función y voy a poner su nombre, que se va a llamar sumaDiez. Y le voy a decir que este sumaDiez va a recibir un parámetro, que voy a ponerle que va a ser x, ¿no? Y esta función va a ser igual a lo que me están pasando más 10, pero quiero que entiedan esto: cuando yo aquí pongo este igual no estoy diciendo que x sea igual a esto. Lo que estoy

diciendo que es igual es la función a la que le paso un parámetro. Así que en realidad, si quieren se lo pongo aquí de otra manera… En realidad lo que estoy diciendo, estoy que voy a poner no cuenta, es solo para que lo entiendan, es como si sumadiez fuera igual a x+10, ¿entienden? Lo que pasa es que el parámetro al que estoy recibiendo lo tengo que poner antes, en la declaración de la función, en la cabecera de la función, antes de decir a lo que es igual toda la función

porque este proceso de a qué es igual toda la función no va a poder calcularlo si antes no hemos dicho que parámetros va a tener la función. Por eso primero tengo que poner los parámetros que recibe, el nombre que van a tener y ya después cuando hago la igualación hago el igual de qué cosa es igual la función, no este valor. Porque si, por ejemplo, fuera una función que tuviera dos parámetros y yo aquí pusiera x y, pues, ¿qué significa, que y es igual a esto? No. Significa

que toda la función es igual a esto, ¿cierto? Entonces yo aquí pongo esto y esto lo quito porque no sirve, era solo como explicación. Así que me he creado una función sumaDiez que va a recibir un valor y va a retornar ese valor más 10. Yo esto lo guardo, me vengo aquí y ahora cargo este archivo haskell.hs ¿Cómo hago eso? Pues pongo :l y ahora le digo el nombre del archivo, haskell.hs. Me lo compila, me dice que ok, que no hay ningún problema, y ahora ya ven que cambió esta línea

del prompt. Ahora ya me dice que tengo aquí un main, como que ya ha cargado funciones que antes no tenía y está correctamente y tiene en memoria esa función y ahora ya puedo hacer una llamada a esa función. Voy a poner aquí sumaDiez 7 y me da un 17, ¿vieron? Y ahora esto puedo combinarlo. Puedo decir que me de el número siguiente de sumaDiez 14, que el número siguiente de sumaDiez 14 va a ser 24, y el siguiente será 25. Ahí lo tienen, ¿vieron? Entonces esta es la forma de

combinar todos estos sistemas de funciones y de crear funciones. Si yo ahora, por ejemplo, a este sumaDiez le cambio el nombre, o bueno, le cambio la estructura, aunque sea aquí sumaDiez, lo que vamos a hacer es restarle, ¿ok? Aunque tenga ese nombre, pero bueno, para que vean un poco cómo recargar aquí un archivo si ya ha sufrido un cambio, cómo hacer para que aquí se refleje, porque si yo ahora aquí llamo y le pongo sumaDiez 8 me sale un 18, porque esto no se actualizó. Entonces,

¿cómo hago para actualizar? Pues entonces tengo que volver a cargarlo. Entonces puedo hacer así y ahora ya si lo vuelvo a cargar y le doy un sumaDiez 2 me da un -8, porque ahora sí lo resto, ¿ok? Y si yo le doy ahora un sumaDiez más, entonces, como ya ha vuelto a cambiarse si hago una llamada me va a seguir restando. Pero si yo hago así: un :r, que es como un reload, ya no tengo que poner ni siquiera el nombre. Simplemente al hacer un reload se autocarga, ¿ven? Y ya se cargó

con el archivo que estoy trabajando: haskell.hs. Entonces, ahora sí, va a tener este valor. Si yo ahora le doy aquí sumaDiez 90 me va a salir un 100. Y aquí igualmente, como ya vieron antes, en otros vídeos, si le pongo un número decimal no hay problema. Esto es cuando yo quiera hacer una llamada a una función que tiene un valor, pero, ¿y si lo que quiero aquí es poner dos números? Entonces pongo aquí sumaNumeros x y y esto retorna x+y, ¿no? Le voy a pasar dos números

por parámetro y me va a devolver la suma, que es lo mismo que sucedía como cuando quería calcular el mínimo de un número, que ponía la función y después ponía los dos números de los que quiero calcular el mínimo, ¿cierto? Entonces yo aquí hago una llamada… bueno, primero tengo que hacer una recarga para que me reconozca que la sintaxis del archivo ya no es esta, sino que tiene estas funciones. Y yo ahora si llamo a sumaDiez no va a funcionar, porque eso ya dejó de existir. Ahora

se llama sumaNumeros. Entonces pongo sumaNumeros y ahora le pongo el 6 y el 2, y me va a salir un 8. Es muy sencillo, ¿pero vieron cómo el peso del valor está en las funciones, no en las variables? Esa es la clave de Haskell y si eso se hace en la cabeza podrán entender más cuestiones que vayan siendo avanzadas. Bueno, pues espero que les esté gustando este curso. Pueden darle a like, suscribirse y compartirlo y nos vemos en siguientes tutoriales.

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!!!!!