2010-11-24 20 views
5

¿Hay algún buen libro para programación funcional en Python o C++? Necesito dominar la programación funcional en esos idiomas.Programación funcional en Python y C++

+9

Te das cuenta de que ni C++ ni Python son realmente lenguajes de programación funcionales. – wheaties

+4

La programación funcional es un concepto. Una vez que lo comprenda, comprender los aspectos fp específicos del lenguaje será mucho más fácil. Si quieres concentrarte en algo funcional por diseño, prueba Haskell o el F # más moderno. – darioo

+0

Estoy de acuerdo con @darioo, aunque creo que para aprender FP, usar un lenguaje puramente funcional es muy importante. No es una mezcla FP/OOP como F # (o Scala o OCaml, para el caso), por lo que no tiene forma de quedarse con las partes que conoce y no aprende nada. Ambos pulgares arriba para Haskell. – delnan

Respuesta

1

Solo una versión futura de C++ admite funciones lambdas/anónimas. Supongo que Boost.Lambda es compatible con la programación funcional de C++, pero aún no es un ciudadano de primera clase de C++.

Los libros sobre programación funcional suelen utilizar lenguajes funcionales. Como Haskell, Miranda, Lisp, Scheme, OCaml, Javascript, etc.

EDITAR: Voy a negar mi opinión sobre Python por el momento. Parece que estoy equivocado sobre algunas cosas.

+0

@ Dragontamer5788 Gracias por responder. ¿Puede sugerirme qué idioma aprender Haskell, Miranda, Lisp, Scheme, OCaml? – Jelena

+0

http://tryhaskell.org/ –

+4

Python admite cierres. –

6

Por la programación funcional, supongo que te refieres transparencia referencial (básicamente, ningún estado global o efectos secundarios), más cosas como funciones como objetos de primera clase, tipos polimórficos, la aplicación parcial de la función etc.

Hay ningún libro que yo sepa cubre la programación funcional en C++. Podría programar sin estado global y efectos colaterales en C++, y puede pasar funciones como argumentos usando punteros con funciones, pero no podría obtener la aplicación de funciones parciales, ni las expresiones lambda anónimas.

+3

Apoyos para no cometer el error popular "FP == funciones anónimas". También agregaría tipos de datos algebraicos y patrones de coincidencia, aunque no es estrictamente un concepto funcional, se usa principalmente allí. – delnan

+2

¿Has visto boost.bind, boost.lambda y C++ 0x? –

+1

En realidad, C++ soportaba aplicaciones de funciones parciales durante mucho tiempo (al menos para funciones binarias) a través de la función estándar std :: bind1st. En C++ 0x, el std :: bind más general funcionará con cualquier función. Con la adición de cierres adecuados y Lambdas en C++ 0x, se convertirá en un lenguaje verdaderamente funcional. Pero C++ como la mayoría de la gente lo sabe (C++ 98 estándar) no es compatible con lambda, y std :: bind1st es molesto de usar. EDIT: Ninja por Fred Nurk. :-( – Dragontamer5788

3

MMhh Si desea aprender programación funcional, primero debe aprender un lenguaje funcional para comprender realmente los principios y luego puede aplicarlos de la mejor manera posible, que será más difícil.

En python puede usar funciones para modificar dictionarys que son bastante funcionales. Haga uso de lambda con una función de orden superior. Tienes que evitar las clases y la herencia.

No puedo decir mucho sobre C++. Tal vez puedas encontrar algunas estructuras de datos funcionales y luego escribir funciones sobre ellas. Busque una biblioteca que proporcione funciones como mapa, reduzca ...

C++ 0x debería admitir cierres y currying (más o menos) para que la cosa mejore.

En general:

  • tratar de escribir capas immutible en librerias (sea awair que esa costumbre Performe que también)
  • Buscar las librerias que se escriben de una manera funcional

Editar : Recomiendo el esquema de aprendizaje, es muy pequeño y puede retomarlo rápidamente. Lea algo como SICP o el Pequeño Schemer que le enseña a pensar recursivamente.

+0

¿Por qué evitar las clases y la herencia? "Clase" en Python solo significa "tipo", como en '[] .__ class__ is list'. –

+0

@Fred Nurk Puede usar las clases que se brindan pero si modela sus programas en clases y cambios de herencia, nunca hará la FP adecuada. Intente trabajar con dictionarys y funciones en lugar de clases y métodos. – nickik

+0

The Little Schemer es bueno. Tiene mucha teoría, pero te permite explorar muchas ideas que de otra forma no conocerías. – Dragontamer5788

0

En la búsqueda de información sobre la programación funcional en Python, he encontrado esta página web es muy útil:

http://www.amk.ca/python/writing/functional

La parte referencias contiene una gran cantidad de información en bruto.

Si está buscando un libro que cubra solo programación funcional en Python, no lo sé.

C++ es más difícil. Tiene muchos de los ingredientes (y está ganando cada vez más) para la programación funcional, pero carece de muchos otros. En realidad, C++ nunca fue diseñado para soportar la programación funcional, por lo que es típico que pueda trabajar con programación funcional en algunos contenedores, pero necesita volver a la programación imperativa con frecuencia.

6

Text Processing in Python usa un estilo funcional, y es lo que me convirtió en la programación funcional. También es un gran libro de programación/Python en general, y lo recomiendo encarecidamente.

+0

Wahoo. Gracias por esta respuesta. Tengo este libro, y nunca lo miré lo suficientemente cerca. – octopusgrabbus

0

Si bien no es un libro, aquí hay un sitio que puede al menos comenzar con algunas cosas. http://www.ibm.com/developerworks/library/l-prog.html

En lo que se refiere a la programación funcional realmente comprensiva, sugeriría algo como "The Little Schemer" para obtener un manejo rápido del plan. A continuación, puede aplicar las ideas a Python.

Cuestiones relacionadas