Question

Je viens de découvrir la bibliothèque Phoenix Boost (caché dans le projet Esprit) et en tant que fan du style fonctionnel de programmation (mais encore un amateur, une petite expérience avec haskell et système) que je voulais jouer avec cette bibliothèque pour en apprendre davantage sur applications raisonnables de cette bibliothèque.

En plus de la increasement de l'expressivité et la clarté du code à l'aide de style fp, je suis particulièrement intéressé en évaluation paresseuse pour accélérer les calculs à bas coûts.

Un exemple petit et simple serait la suivante: il y a une sorte de problème de routage (comme le thé), qui utilise une matrice de distance eucliedean. Nous partons du principe que certaines des valeurs de la matrice de distance ne sont jamais utilisées, et certains sont utilisés très souvent (il est donc pas une bonne idée de les calculer à la volée pour chaque appel). Maintenant, il semble raisonnable d'avoir un paresseuse structure de données contenant les valeurs de distance. Comment serait-ce possible avec Phoenix? (En ignorant le fait que je serais facilement fait sans fp-style-programmation du tout) La lecture de la documentation officielle de Phoenix ne me laisse pas comprendre de quoi répondre.

Est-il possible? (En Haskell par exemple la possibilité de créer thunks qui sont en garantissant que la valeur peut être calculée par la suite sont dans le noyau de la langue).

Qu'est-ce que le fait d'utiliser un vecteur avec toutes les fonctions définies dans paresseuses moyenne de Phoenix? Aussi naïf que je suis, j'ai essayé de remplir deux matrices (vecteur>) avec des valeurs aléatoires, une avec la push_back normale, l'autre avec boost :: Phoenix :: push_back et essayé de lire seulement une petite quantité de valeurs de ces matrices et de les stocker dans un récipient pour l'impression. Le paresseux était alway vide. Suis-je utiliser phénix dans une mauvaise façon / il devrait être possible? Ou ai-je mal comprendre la fonction des conteneurs / algorithmes à Phoenix. Un petit indice pour ce dernier un est l'existence d'une liste spéciale-structure de données dans la bibliothèque de la FP, qui a influencé phénix.

De plus:

  • Qu'est-ce que vous utilisez pour Phoenix?
  • Connaissez-vous quelques bonnes ressources au sujet de Phoenix? (Tutoriels, billets de blog ...)

Merci pour tous vos commentaires!

Était-ce utile?

La solution

Comme demandé, mon commentaire (avec des ajouts et des modifications mineures) comme une réponse ...

Je sais que votre situation exactement, moi aussi joué avec Phoenix (même si je ne l'ai pas creuser très profondément, la plupart du temps un sous-produit de la lecture du Boost :: tutoriel Spirit) relativement bientôt il y a quelque temps, après avoir attrapé le bug fonctionnel et apprentissage Haskell de base - et je n'ai rien travail :( Ce BTW est en phase avec mon expérience générale avec la magie du modèle sombre: Très facile de mal comprendre, vis et se coups de poing au visage avec un comportement tout à fait inattendu ou des messages d'erreur incompréhensibles.

Je vous conseillons de rester à l'écart de Phoenix pendant longtemps. Je aime FP aussi, mais FP en C ++ est encore plus laid que mutabilité dans Haskell (ils seraient en tête à tête, mais C ++ est déjà laid et Haskell est, au moins selon Larry Wall, la plus belle langue jamais;)). Apprendre et utiliser FP, et quand vous êtes bon et forcé d'utiliser C ++, utilisez Phoenix. Mais pour l'apprentissage, une bibliothèque que les boulons d'un paradigme tout à fait différent sur un langage déjà complexe (à savoir FP en C ++) n'est pas conseillé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top