Imaginemos un mundo libre

La paz interior comienza en el momento en el que decides no permitir, que ninguna persona o evento, tome el control de tus emociones.

Haskell y la Programación Funcional

with 6 comments

Despues de tanto tiempo sin postear debido al trabajo y estudios. Mi blog ya estaba llenándose de polvo. Pues hoy quiero hablar brevemente de lo que estoy estudiando en la Universidad: Haskell y Programación Funcional (P.F)

La P.F es un paradigma de programación que se basa en el uso de funciones matemáticas para resolver problemas. Algunos lenguajes de programación funcional son Lisp (El más popular aun usado por muchos programadores) , Scheme, AP, Haskell y Miranda.

Entre las principales características de P.F tenemos:

  • Los bucles se modelan a través de la recursividad ya que no hay manera de incrementar o disminuir el valor de una variable,
  • Definición y evaluación de funciones y variables.
  • Y una cosa realmente interesante de la P.F es que las funciones son consideradas un tipo de dato primitivo. Qué significa esto?.

Primeramente, definimos a un dato primitivo como aquel que puede ser el valor de una variable, argumento de una función o valor que devuelve una función. En otros paradigmas de programación los números, caracteres y cadenas son datos primitivos, sin embargo sus funciones y procedimientos no pueden ser considerados como tal. Entonces podríamos decir que en la PF.podríamos hacer esto:

  • Una función podría tomar como argumentos otras funciones
  • Devolver un procedimiento como resultado de una llamada a otro procedimiento.
  • Tener estructuras de datos que contengan procedimientos como elementos
  • Una variable puede tener como valor un procedimien

No es esto una gran ventaja?. Solo sería cuestión que TÚ lo pruebes y juzgues por tu cuenta. En muchas univesidades e institutos del país aun se sigue enseñando paradigmas como el imperativo y orientación a objetos, pero es interesante probar nuevas cosas y apostar por el cambio.

EL L.P que estamos aprendiendo este semestre en la U es Haskell, un lenguaje funcional puro de propósito general que no goza de mucha popularidad, pero ya tiene un prestigio bien ganado, por algunas características que lo hacen elegante, eficiente y potente para resolver problemas. Más adelante entraremos en detalles.

Quisiera contar como experiencia personal que he programado en PHP desde hace casi 2 años a Ruby lo he investigado tan solo un par de meses y ahora puedo decir que con Haskell he pensado, razonado y hecho funcionar más el cerebro que con los anteriores. El nivel de abstracción, desarrollo de la lógica se producen a grandes niveles en Haskell.

Ahora vamos al grano, queremos jugar con Haskell. Tenemos varias implementaciones del lenguaje, entre las principales tenemos el intérprete HUGS y el compilador GHC. He leído en algunas listas de correo y me han recomendado usar GHC, pero bueno empezemos con algo más liviano y menos sofisticado como es Hugs para empezar a probar.

No perdamos tiempo compilando, y como Debian todo lo tiene y lo que no tiene se lo inventa solo bastaría un: sudo apt-get install hugs , Tecleamos en nuesto terminal hugs y tendremos una salida como esta:
|| || || || || || ||__ Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__|| __|| Copyright (c) 1994-2005
||—|| ___|| World Wide Web: http://haskell.org/hugs
|| || Report bugs to: hugs-bugs@haskell.org
|| || Version: 20050308 _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Type : ? for help
Hugs.Base>

Jejeje, sigamos , puedes editar tus programas en consola si deseas, nano, pico, vi,etc, bueno yo prefiero usar el gedit que te aclara muy bien el código. Crearemos nuestro archivo examples.hs y empezemos con un típico ejemplo, una función que me calcule el factorial de un número, tan simple como esto

fact::Int->Int
fact n
| n ==0 = 1
| otherwise = n * fact(n-1)

Recibimos un entero y que nos devuelva otro entero y usamos la recursión para hacer el cálculo. Para probarlo en nuestra consola:

ronny@mentelibre:~/haskell$ hugs examples.hs

Main> fact 5

120

Ohhhhhh que maravilla, fue solo para probar. Ahora queremos una funcion que me halle a^b editamos nuestro examples.hs

potencia::Int->Int->Int
potencia a b
| b ==0 = 1
| a ==1 = 1
| otherwise = a * potencia a (b-1)

Main> :r //para actualizar nuestro archivo y luego

Main> potencia 5 4

625

Ahora vamos a sumar todos los dígitos de determinado número:

suma::Int->Int
suma n

| n < 10 = n
| otherwise = suma(div n 10) + (mod n 10)

Actualizamos con :r y luego

Main> suma 123456789

45

Fueron ejemplos sencilllos de introducción, en los proximos posts emplearemos listas, tuplas, matrices, algoritmos de ordenación, algoritmos de búsqueda y otras cosillas que con Haskell son muy interesantes.

Gracias por tu visita al blog. Puedes seguirme en Twitter haciendo click en el siguiente enlace:

Written by Ronny Yabar

November 23, 2007 at 6:14 pm

6 Responses

Subscribe to comments with RSS.

  1. Hola master , muy util tus ejemplos ,la verdad que ami me sirvieron d emucho como modelos de ejemplo. Estoy en la UNRC estudiando Analista en sistemas y en esta etapa con programacion funcional.. te dejo mi mail arriba ,tengo idea de hacer un web dedicado a todos los estudiantes de analista en sistemas y licenciatura . Donde contenga modelos como los de este blog, y ejercicios ,pruebas, y demas…Saludos

    Nicolas

    April 28, 2008 at 7:57 pm

  2. Estos ejemplos son realmente buenos pero tengo dudas en funcion recursiva pòdria gentilmente proporcionarme otros ejemplos… saludos

    karla

    May 10, 2009 at 7:41 pm

  3. Muchas gracias por los ejemplos, quisiera saber como tengo que hacer para programar en modo grafico en haskell, y si tuvieran algunos ejemplos apreciaria mucho que me enviaran…..saludos y gracias.

    Richard

    July 11, 2009 at 8:56 pm

  4. Esos ejemplos estan muy buenos, el emplear la recursividad es es muy util, tambien hay algunos ejemplos utiles en http://www.program.webcindario.com si alguno desea observarlos.

    John

    August 14, 2009 at 1:32 am

  5. Gracias por el aporte
    No se si podrian dar algun otro ejemplo.

    John

    September 4, 2009 at 4:22 pm

  6. me gustaria que me ayudara con las potencias de distinta bases y exponentes para programar en haskell

    esmeralda

    November 7, 2009 at 3:14 am


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: