Historias
Slashboxes
Comentarios

Programación funcional para el resto de nosotros

editada por Yonderboy el 01 de Febrero 2008, 04:55h   Printer-friendly   Email story
desde el dept. paradigmas-de-programación
Capirucho nos cuenta: «Leyendo la última noticia sobre Scala salieron varios hilos hablando sobre la programación funcional. A muchos programadores acostumbrados a la programación imperativa estos conceptos nos resultan bastante complicados, así que tras informarme un poco llegué a un artículo, programación funcional para el resto de nosotros. En este artículo se afirma que los artículos y papers sobre programación funcional no tendrían por qué ser tan esotéricos, y que en realidad los conceptos no tienen nada inherentemente complicado. Además ofrece una introducción realmente clara a estos conceptos que a muchos que habíamos hecho nuestros pinitos con algún lenguaje funcional como haskell nos habían resultado tan extraños. Sería interesante conocer la opinión que tienen los barrapunteros sobre estos lenguajes que ya están triunfando en algunos campos como la programación concurrente (erlang) o la programación estadística (R).»

Historias relacionadas

[+] Java fue un amor adolescente, Scala será el lenguaje de tu madurez 117 comentarios
BlueVoodoo nos cuenta: «Java y la orientación a objetos fueron el primer amor de muchos programadores, y les tratamos con el mismo respeto y adoración con el que yo trataba a Bindi (mi primera novia). Pero el tiempo siempre se lleva los primeros amores, y llega un momento en el que hay que romper y seguir adelante. Los sentimientos cambian y las personas maduran. Pero lo más importante es que el mundo a nuestro alrededor también ha cambiado. Java ha envejecido. Ha llegado el momento de aprender Scala con este tutorial
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • Algunas desventajas

    (Puntos:3, Interesante)
    por pobrecito hablador el Viernes, 01 Febrero de 2008, 05:38h (#1010084)
    En general las desventajas que veo a lenguajes como Haskell (no tengo experiencia en otros) es que las operaciones que no sean una función en el puro estricto matemático son un poco más coñazo. Por ejemplo, una función que te devuelva un número aleatorio (que debe ser distinto cada vez). Ahí es dónde entran en juego las mónadas, que suelen aprenderse mal y luego usarse mal.

    En favor de estos lenguajes debo decir que he visto gente que aprendió haskell como primer lenguaje y son PUTOS AMOS en programación.

    El problema es que tiene tantas cosas buenas (ver el artículo para tener más referencias) que uno se acostumbra y luego le da por saco no poder pasar funciones anónimas como argumento, no poder hacer pattern matching, evaluación perezosa,...

    Y por último, os dejo una pequeña perlita para que veáis a dónde llega Haskell:

    Una lista de enteros se representa como [Int].

    + (el operador) es en realidad una función que toma dos argumentos numéricos del mismo tipo y te da un tercer valor.

    Pero si a + le das un argumento, "se convierte" en una función que recibe un argumento (el segundo sumando), y te da un valor.

    Por ejemplo, (1+) es una función (y esto es sintaxis Haskell) que recibe un sumando y le suma 1.

    Existe una función llamada map que toma una lista de elementos del mismo tipo (a), una función que toma elementos de tipo a y devuelve elementos de tipo (b) (es decir, no necesariamente el mismo tipo que su entrada), y la aplica a todos los elementos de la lista.

    Por lo tanto:
    map (1+) [1,2,3] es [2,3,4]
    map (2*) [1,2,3] es [2,4,6]

    ¿Cómo haces un map genérico en Java?

  • El problema

    (Puntos:2)
    por Julio_sao (29798) el Viernes, 01 Febrero de 2008, 08:24h (#1010116)
    ( http://es.geocities.com/julio_sao | Última bitácora: Martes, 06 Mayo de 2008, 08:01h )
    El problema es que he leído que la mayoría de los ordenadores actuales no están preparados para esta clase de lenguajes, por lo que suelen usar demasiada pila y desaprovechan muchos recursos de las computadoras que están mas bien pensados para la programación imperativa. (no se si estoy dando palos de ciego, que alguien lo confirme o lo rebata)

    Personalmente he programado en CAML y tras unas dos semanas de dolores de cabeza todo empezaba a salir solo, creas funciones pequeñitas que luego las llaman más funciones pequeñitas y al final el programa entero es una función de poco mas de una linea jeje viene bien para luego cuando programas en lenguajes, como dirían los ceceros "de verdad" por que esa mentalidad luego es buena por que elimina muchos malos hábitos como variables globales, gotos y demás, lo malo es que las funciones que haces son muy pequeñas y hay demasiadas llamadas a subrutina, por lo que la eficiencia se resiente algo, aunque el mantenimiento es sencillísimo

    Lo que no me veo es creando un programa de transferencias bancarias en CAML xDDDD

    • Re:El problema de cobretti (Puntos:1) Viernes, 01 Febrero de 2008, 11:30h
    • Re:El problema de radarlibre (Puntos:1) Viernes, 01 Febrero de 2008, 13:00h
    • 2 respuestas por debajo de tu umbral de lectura actual.
  • por Inconexo (20311) el Viernes, 01 Febrero de 2008, 09:04h (#1010138)
    ( http://asqueados.campanilla.net/wp | Última bitácora: Jueves, 05 Junio de 2008, 10:23h )
    Que no es muy buena.

    Tuve una asignatura llamada "Programación Declarativa". Empecé aprendiendo Prolog. Al principio muy bien, me sorprendió mucho el nuevo enfoque y resultaba emocionante.

    Pero cuando tuvimos que hacer cosas más avanzadas, lo que hicimos fue aprender cómo funcionaba el intérprete, para simular sentencias de control de flujo (whiles, for, ...). Para eso, uso C.

    Después dedicamos un poquito de tiempo a Lisp. Su rasgo más sorprendente es que no existía operador de asignación. Así que lo primero que aprendimos fue a simularlo.

    En resumen, aprendimos cómo programar imperativamente en un lenguaje declarativo. Como decía otro profesor, para esos viajes no necesitábamos esas alforjas.
  • Al final...

    (Puntos:1)
    por ViaToR (31137) el Viernes, 01 Febrero de 2008, 09:23h (#1010150)
    Da igual con que programes. Los lenguajes de programación no son más que una herramienta, y el código que ejecuta la CPU es imperativo. ¿Y si me coche funciona con gasolina, para que echarle agua o queroseno (por muy bueno que sea)? O, ¿si me da por hablar con una persona que sólo habla Castellano en Inglés, por que éste es más eficiente? Pues pasan cosas como éstas [debian.org] Claro que hay lenguajes que facilitan ciertas tareas, que son mas metódicos en ciertos aspectos, o simplemente son otros modelos de programación. Cada uno tiene sus virtudes y sus defectos, y uno tiene que conocerlos para saber en que campos se pueden utilizar, y así sacar provecho de cada uno. Pero no olvidemos, que al final, todos se puede hacer con los lenguajes de siempre. ¿A qué venia todo esto? Pues que ahora está muy de moda hablar de ciertos lenguajes "nuevos" magnificando un sus virtudes. Así que un apoyo desde aquí a los de toda la vida! :D PD: Muy completo el articulo de Functional Programming :)
  • por harverto (5782) el Viernes, 01 Febrero de 2008, 09:52h (#1010172)
    ( http://www.estebang.com/nuevo )
    Imaginad... un compilador que, a partir de un algoritmo (formulado en C++, Pascal, basic) fuera capaz de generar un binario consultando bases de datos de códigos ya generados de comportamiento idéntico y rendimiento óptimo. ¿Existe algo similar?
    Por otro lado, ¿existe algún tipo de guía para seleccionar las mejores herramientas según el proyecto a llevar a cabo? del tipo "este lenguaje mejor para este micro y este otro mejor para proyectos científicos"

    Vaya manera de comentar un post, sembrando más dudas...
    --
    No hay futuro... que ya esté escrito
  • Es bien simple

    (Puntos:3, Inspirado)
    por Lock (3731) <{lock_peter} {at} {yahoo.es}> el Viernes, 01 Febrero de 2008, 10:17h (#1010189)
    ( http://barrapunto.com/ )
    Decide tus objetivos.

    Evalua las herramientas.

    Y elige una.

    Los lenguajes funcionales tienen un nicho que está enfocado al objetivo del programa que se esté haciendo. Matemáticas intensivas, programacion de algoritmos geneticos, evaluacion semántica y similares.
    Me encantan los lenguajes funcionales (principalmente lisp y prolog, que es como un ser mixto). Pero NUNCA he tenido que elegir uno para ninguna de las tareas que he realizado en los últimos 12 años. (vamos, nunca fuera de una practica de universidad)

    ¿te gusta haskell? pues encantado. Pero el gusto no tiene nada que ver (salvo para elegir lenguaje cuando la tarea lo requiera).

    La mayoría de los problemas triviales en el 99.9 por ciento de los programas que se hacen se vuelven monstruos incongruentes si se intentan realizar con programacion funcional.

    Igual que cualquier problema trivial para el que la programacion funcional es perfecta se puede convertir en imposible de solucionar fuera de ella.

    Pero en fin, esto me recuerda a la disyuntiva sobre programacion recursiva/no recursiva. Es exactamente lo mismo. No sirven para hacer las mismas cosas.

    --
    ¿¿PETER?? ¿Demostenes? Y actualmente Lockpeter
  • por aleiva (38166) el Viernes, 01 Febrero de 2008, 11:01h (#1010214)
    Haskell Tutorial for C Programmers - http://www.haskell.org/~pairwise/intro/intro.html [haskell.org] Un excelente recurso cuando has contaminado tu manera de pensar con los lenguajes imperativos e intentas empezar a programar con algún lenguaje funcional. (dirigido a haskell, pero es indiferente)
  • por pepevilluela (35371) el Domingo, 03 Febrero de 2008, 20:03h (#1011127)
    En su día vi una librería de java que interpreta Lisp, pero usando incluso los objetos de java (en freshmeat.net he visto esto pero no estoy seguro que fuera la que vi en su día: http://freshmeat.net/redir/jacol/20454/url_homepag e/jacol.sourceforge.net [freshmeat.net]). Lo bueno sería poder usar desde un lenguaje otro para hacer una función aparte si necesita otro estilo de programación.
  • 1 respuesta por debajo de tu umbral de lectura actual.