Me acabo de enterar de la biblioteca de Boost Phoenix (escondida en el proyecto Spirit) y como fanático del estilo de programación funcional (pero aún aficionado; experiencia con haskell y el esquema) quería jugar con esta biblioteca para obtener información sobre aplicaciones razonables de esta biblioteca.Comprensión y uso de la Biblioteca Boost Phoenix con un enfoque en la evaluación perezosa
Además del acrecentamiento de la expresividad y la claridad del código usando fp-estilo, estoy especialmente interesado en perezoso-evaluación para acelerar los cálculos a bajo costo.
Un ejemplo pequeño y simple sería el siguiente: hay algún tipo de problema de enrutamiento (como el TSP), que está utilizando una matriz de distancia eucliedean. Suponemos que algunos de los valores de la matriz de distancia nunca se utilizan, y algunos se utilizan con mucha frecuencia (por lo que no es una buena idea calcularlos sobre la marcha para cada llamada). Ahora parece razonable tener estructura de datos perezosa manteniendo los valores de distancia. ¿Cómo sería eso posible con Phoenix? (Ignorando el hecho de que me haría fácilmente sin la programación de estilo fp) Leer la documentación oficial de Phoenix no me dejaba entender lo suficiente como para responder eso.
¿Es posible en absoluto? (en Haskell, por ejemplo, la capacidad de crear thunks que garantizan que el valor se puede calcular más adelante se encuentra en el núcleo del lenguaje).
¿Qué significa usar un vector con todas las funciones perezosas definidas en phoenix? Tan ingenuo como soy, intenté llenar dos matrices (vector>) con valores aleatorios, una con push_back normal, la otra con boost :: phoenix :: push_back e intenté leer solo una pequeña cantidad de valores de estas matrices y almacenarlos en un contenedor para imprimir. El perezoso estaba siempre vacío. ¿Estoy usando Fénix de una manera incorrecta/debería ser posible? O no entendí la función de los contenedores/algoritmos en Phoenix. Una pequeña pista para este último es la existencia de una estructura de datos de lista especial en la biblioteca de FP ++, que influyó en Phoenix.
Además:
- ¿Qué estás usando phoenix?
- ¿Conoces algunos buenos recursos con respecto a phoenix? (tutoriales, entradas de blog ...)
¡Gracias por su contribución!
Te aconsejo que te mantengas alejado de Phoenix. Me gusta FP también, pero FP en C++ es incluso más feo que la mutabilidad en Haskell (serían cabeza a cabeza, pero C++ ya es feo y Haskell es, según Larry Wall, el lenguaje más bello de la historia). Aprenda y use FP, y cuando sea bueno y forzado a usar C++, use Phoenix. Pero para aprender, no es aconsejable una biblioteca que arroje un paradigma completamente diferente en un lenguaje ya complejo. – delnan
Bastante deprimente: - /. Pero entendí tu punto. Tal vez era demasiado optimista con respecto a la facilidad de uso de las características de fp en un lenguaje realmente complejo como C++. Gracias cuatro tu respuesta. – sascha
@delnan: ¿podría convertir su comentario en una respuesta? Parece que ha satisfecho sascha, y es alto en la consulta "sin respuesta". –