Prelude - a Haskell-like functional library
Publicado por Edgar González 31 Agosto 2006 en Ruby, Software Libre / Abierto.
Revisando rubyforge me encuentro con un nuevo proyecto llamado Prelude, el cual es una librería funcional al estilo-Haskell para Ruby.
El objetivo de Prelude es permitir que los programadores Ruby puedan usar características de Haskell como funciones de orden-superior, mónadas, listas infinitas, entre otras.
Tengo tiempo dándole vueltas a Haskell, veré si en un par de meses puedo darle una “probada” en serio, la verdad es que el lenguaje se ve bien interesante.
haskell si es interesante - pero no se si seria facil cambiar ruby a haskell a traves de usar una libreria. veo muchos problemas, incluiendo:
1- parece, leyendo la documentacion de la dicha libreria, que ruby no tiene “tail call optimisation” (lo que expliqueria porque no se puede definir un fold recursivo que funciona bien con una lista de mas que 800 elementos). en haskell es muy, pero muy, usual definir procesamientos en la forma de funciones recursivos porque….
2- haskell tiene “pattern matching”, y ruby no (si entiendo bien). aunque no es nada mas que “syntax sugar”, pattern matching es responsable por la elegancia de la mayoria del codigo escrito en haskell. por ejemplo:
f 0 = 1
f n = n * f (n-1)
(codigo haskell valido) - no se necesita “if n == 0 …. else ….”. asi que el codigo se ve muy limpio y puro.
3- es facil confundirse sin static types. en un programa haskell es normal usar funciones muy generales (map, fold, etc) para procesar estructuras complejas. en un idioma como ruby, hay que escribir pruebas para todo los casos y, cuando fallen, a veces no es tan claro porque. en haskell, ese problema no existe - no se necesita definir ningun tipo (normalmente), pero igual el compilador va a verificar que el codigo sea auto-consistente. lo que estoy tratando de explicar (una meta no tan facil con mi castellano horrible) es que este problema - que ya conozemos desde la diferencia entre java y ruby, por ejemplo - es mucho mas grave en el caso de haskell, donde se usa funciones much mas generales, y mas niveles de abstraccion.
ja. tengo que confesar que nunca he usado ruby (aunque he estudiado un sistema escrito con ruby on rails y me impresiono *harto* - era much mas simple que algo equivalente que escribi en java) pero si he usado haskell. si aun quieres probar haskell, puedo sugerir que una libreria mia - pancito, http://www.acooke.org/jara/pancito/index.html - puede ser util. no soy un experto en haskell, y el codigo no es perfecto, pero la generacion de “imagenes funcionales” es un proceso entretenido, y ya ha servido como introduccion basica a haskell por unas personas.
[soy ingles, vivo aca en stgo, y trabajo en turnos en la serena. encontre este blog buscando algo interesante, relacionado a programacion aca en chile. me gusta mucho lo que ya he leido. hay otros blogs que tratan de temas similares? hay alguna sociedad profesional con charlas aca? bueno - gracias por tratar de entenderme! andrew]
aiie - puchas, disculpame. recien recibi un email diciendo que estan en venezuela, y no chile. encontre el sitio web buscando “haskell santiago chile” en google, si me acuerdo bien, y por eso asumi que ustedes eran chilenos. disculpame….