Boost Phoenixライブラリ(Spiritプロジェクトに隠されている)について知り、関数型プログラミングスタイルのファンとして(ただし、まだアマチュアです。haskellとスキームに関する小さな経験があります)、このライブラリを試して学びたいと思いました。このライブラリの合理的なアプリケーションについて。
fpスタイルを使用したコードの表現力と明瞭さの向上に加えて、低コストで計算を高速化するための遅延評価に特に興味があります。
小さくて単純な例は次のとおりです。ユークリッド距離行列を使用しているある種のルーティング問題(tspなど)があります。距離行列の値の一部は使用されておらず、一部は非常に頻繁に使用されると想定しています(したがって、呼び出しごとにその場で計算することはお勧めできません)。これで、距離の値を保持する怠惰なデータ構造を持つことが合理的であるように思われます。それはフェニックスでどのように可能でしょうか?(fp-style-programmingがまったくなくても簡単に実行できるという事実を無視して)フェニックスの公式ドキュメントを読んでも、それに答えるのに十分な理解が得られませんでした。
それは可能ですか?(たとえばHaskellでは、後で値を計算できることを保証するサンクを作成する機能は、言語のコアにあります)。
フェニックスで定義されているすべての怠惰な関数でベクトルを使用するとはどういう意味ですか?私は素朴ですが、2つの行列(ベクトル>)をランダムな値で埋めようとしました。1つは通常のpush_backで、もう1つはboost :: phoenix :: push_backで埋め、これらの行列から少量の値のみを読み取ろうとしました。印刷用の容器に保管してください。怠惰なものは常に空でした。私はフェニックスを間違った方法で使用していますか/それは可能であるはずですか?または、フェニックスのコンテナ/アルゴリズムの機能を誤解しましたか?後者の小さな手がかりは、フェニックスに影響を与えたFP++ライブラリに特別なリストデータ構造が存在することです。
さらに:
- フェニックスは何に使っていますか?
- フェニックスに関するいくつかの良いリソースを知っていますか?(チュートリアル、ブログエントリ...)
ご入力いただきありがとうございます。