¿Ejemplo de dónde la programación funcional es superior a la programación imperativa u orientada a objetos? [duplicar]

13

He estado leyendo sobre programación funcional. He estado utilizando principalmente C # .net recientemente, y me gustaría conocer un buen ejemplo del mundo real en el que un lenguaje funcional como Lisp o F # sería una herramienta claramente superior para realizar un trabajo.

    
pregunta Rice Flour Cookies 01.11.2011 - 17:31

4 respuestas

9

Encuentro mejor los lenguajes funcionales porque tienden a exigir muy poca ceremonia por la funcionalidad que proporcionan. Por ejemplo ... tomemos cada número en una lista de enteros, agregue uno al número y luego sumémoslo.

En Clojure:

(reduce + (map inc mylist))

En C # (estilo funcional):

result = mylist.Select(i => i + 1).Sum();

En C # (estilo imperativo):

int sum = 0; 
foreach (int i in mylist)
{
   sum += (i + 1);
}

Veamos el estilo imperativo ... tenemos que crear un acumulador (suma), una variable de alcance local (i), y también debemos ser explícitos en la forma en que enumeramos nuestro bucle. Lo que toma una sola línea de código y es extremadamente legible en un lenguaje funcional se ha multiplicado en 5 líneas de C # y no es tan legible.

Luego de estudiar los lenguajes imperativo y funcional durante varios años, simplemente llegué a la conclusión de que preferiría usar menos trabajo para lograr más. Desde que me cambié a Clojure para todos mis proyectos de hobby, descubrí que de repente puedo lograr mucho más con menos código.

Entonces, volviendo a tu pregunta, nunca me pregunto "¿por qué usaría un lenguaje funcional?", sino por el contrario, "¿por qué no usaría un lenguaje funcional?". Algunas veces requiere pensar en el problema de una manera diferente, pero encuentro que mi código funcional es más conciso, elegante y legible que el código que estoy obligado a escribir en C #.

Para el contexto, código en C # 8+ horas al día en el trabajo, y código alrededor de 1-2 horas en Clojure todas las noches.

    
respondido por el Timothy Baldridge 01.11.2011 - 22:01
2

La programación funcional se usa comúnmente en académicos. Algunos dirían que es superior en la enseñanza. También es bueno para sistemas concurrentes masivos.

La mayoría de lo que estás preguntando puede responderse mediante varias preguntas anteriores:

Usos de Lisp: enlace

Uso de F #: enlace

Uso de Haskell: enlace

Uso de Erlang: enlace

    
respondido por el Pubby 01.11.2011 - 17:53
2

Muchos de los lenguajes funcionales fueron diseñados para su uso en sistemas de alta disponibilidad. Erlang, por ejemplo, es el lenguaje detrás de la lógica de la mayoría de nuestros sistemas de telefonía celular (al menos, aquellos basados en los nodos de Ericsson). Se espera que esos sistemas proporcionen niveles muy altos de disponibilidad (estamos hablando de Nueve Nueve, 99.9999999% de tiempo de actividad; eso es algo así como 30 milisegundos por año de tiempo de inactividad permisible) mientras que al mismo tiempo sigue siendo modular y altamente escalable Lo hace con algunas de las funciones integradas en muchos lenguajes funcionales, como el código de intercambio en caliente (no es necesario recompilar los DLL y reiniciar el sistema; simplemente coloque el nuevo paquete allí y la próxima llamada a ese paquete será con el nuevo código). ).

Aparte de eso, muchas ideas en computación se expresan más fácilmente funcionalmente. La programación funcional es inherentemente recursiva y altamente paralelizable, por lo que las tareas que están mejor diseñadas de tal manera se prestan bien a los lenguajes funcionales. La paralelización en particular es cada vez más importante a medida que aumenta la potencia de una CPU al agregar unidades de ejecución al chip en lugar de aumentar los relojes. El procesamiento de archivos y otras tareas ETL se pueden definir funcionalmente y se benefician enormemente de lanzar más subprocesos al problema.

    
respondido por el KeithS 01.11.2011 - 18:39
1

La programación funcional es superior en todos los ámbitos. No he encontrado un caso en el que un lenguaje de programación funcional, o un estilo más funcional en un lenguaje imperativo, sea una mala solución a un problema.

Es mucho más fácil hacer las cosas cuando el lenguaje es más expresivo. No se trata de tersitud, aunque eso es un efecto secundario, sino de poder entender y razonar sobre más programas a la vez. En un lenguaje funcional, no siempre tiene que escribir una descripción de cómo calcular lo que desea, puede escribir una descripción de lo que realmente desea.

El uso de un lenguaje de programación funcional lo alienta a pensar en su programa en términos de flujo de datos y cálculo, en lugar de estado y mutación. Es mucho más fácil resolver problemas funcionalmente. ¿Y no está resolviendo problemas exactamente lo que los programadores deben hacer?

    
respondido por el Jon Purdy 01.11.2011 - 18:42