Frage

Ich habe gerade herausgefunden über die Boost-Phoenix-Bibliothek (im Geist Projekt versteckt) und als Fan des Funktions-Programmierung Stil (aber immer noch ein Amateur, einige kleine Erfahrung mit Haskell und Schema) wollte ich mit diesem spielen, um Bibliothek lernen vernünftige Anwendungen dieser Bibliothek.

Neben der increasement von Ausdruckskraft und Klarheit des Codes mit fp-Stil, ich bin besonders interessiert in lazy-Auswertung für Berechnungen bei niedrig Kosten zu beschleunigen.

Ein kleines und einfaches Beispiel wäre die folgende: gibt es eine Art von Routing-Problem (wie die tsp), die eine eucliedean Abstandsmatrix verwendet. Wir gehen davon aus, dass einige der Werte der Distanzmatrix nie verwendet werden, und einige sind sehr häufig verwendet wird (so ist es keine gute Idee ist, sie schnell für jeden Anruf zu berechnen). Nun scheint es sinnvoll zu sein, um einen zu haben, faul Datenstruktur , um die Abstandswerte zu halten. Wie wäre das möglich mit Phönix? (Ohne Berücksichtigung der Tatsache, dass ich einfach ohne fp-style-Programmierung überhaupt getan werden würde) die offizielle Dokumentation von Phoenix Lesen hat mich nicht verstehen genug, das zu beantworten.

Ist es überhaupt möglich? (In Haskell zum Beispiel der Fähigkeit, Thunks zu schaffen, die gewährleistet werden, dass der Wert später berechnet werden kann, ist in dem Kern der Sprache).

Was einen Vektor mit allen den faulen Funktionen bietet mit in Phoenix Mittelwert definiert? So naiv, wie ich bin, habe ich versucht, zwei Matrizen (Vektor>) mit zufälligen Werten zu füllen, eine mit dem normalen push_back, das andere mit boost :: Phoenix :: push_back und versucht, nur eine kleine Menge von Werten aus diesen Matrizen auszulesen und speichert sie in einem Behälter zum Ausdrucken. Der faule war alway leer. Bin ich phoenix in einer falschen Weise unter Verwendung von / sollte es möglich sein? Oder habe ich falsch verstehen die Funktion der Container / Algorithmen in Phoenix. Ein kleiner Hinweis für die letztere ist die Existenz einer speziellen Liste-Datenstruktur in der FP ++ Bibliothek, die Phoenix beeinflusst.

Zusätzlich:

  • Was sind Sie phoenix für?
  • Sie wissen einige gute Ressourcen in Bezug auf Phoenix? (Tutorials, Blog-Einträge ...)

Vielen Dank für Ihre Eingabe!

War es hilfreich?

Lösung

Wie gewünscht, mein Kommentar (mit Ergänzungen und kleinen Modifikationen) als Antwort ...

Ich kenne deine Position genau, auch ich mit Phoenix rumgespielt (obwohl ich nicht sehr tief war eingraben, meist einen Beiprodukt des Lesens der boost :: spirit Tutorial) eine Weile her, relativ bald nach dem funktionalen Fehler zu kontrollieren und Grund Haskell zu lernen - und ich habe nichts zum Laufen bringen :( das ist btw synchron mit meiner allgemeinen Erfahrung mit dunklen Vorlage Magie: Sehr leicht zu Missverständnissen, vermasselt und im Gesicht mit völlig unerwartetem Verhalten oder unverständlichen Fehlermeldungen gestanzt bekommen.

Ich würde Ihnen raten von Phoenix für eine lange Zeit zu bleiben weg. Ich mag FP auch, aber FP in C ++ ist noch hässlicher als Veränderlichkeit in Haskell (sie würden seinen Kopf an Kopf, aber C ++ ist schon hässlich und Haskell ist, zumindest nach Larry Wall, der schönsten Sprache immer;)). Lernen und verwenden FP, und wenn Sie gut darin und gezwungen, C ++, verwendet Phoenix. Aber für das Lernen, eine Bibliothek, die Schrauben ein ganz anderes Paradigma auf einer bereits komplexe Sprache (d FP in C ++) ist nicht ratsam.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top