7

Boost Phoenixライブラリ(Spiritプロジェクトに隠されている)について知り、関数型プログラミングスタイルのファンとして(ただし、まだアマチュアです。haskellとスキームに関する小さな経験があります)、このライブラリを試して学びたいと思いました。このライブラリの合理的なアプリケーションについて。

fpスタイルを使用したコードの表現力と明瞭さの向上に加えて、低コストで計算を高速化するための遅延評価に特に興味があります。

小さくて単純な例は次のとおりです。ユークリッド距離行列を使用しているある種のルーティング問題(tspなど)があります。距離行列の値の一部は使用されておらず、一部は非常に頻繁に使用されると想定しています(したがって、呼び出しごとにその場で計算することはお勧めできません)。これで、距離の値を保持する怠惰なデータ構造を持つことが合理的であるように思われます。それはフェニックスでどのように可能でしょうか?(fp-style-programmingがまったくなくても簡単に実行できるという事実を無視して)フェニックスの公式ドキュメントを読んでも、それに答えるのに十分な理解が得られませんでした。

それは可能ですか?(たとえばHaskellでは、後で値を計算できることを保証するサンクを作成する機能は、言語のコアにあります)。

フェニックスで定義されているすべての怠惰な関数でベクトルを使用するとはどういう意味ですか?私は素朴ですが、2つの行列(ベクトル>)をランダムな値で埋めようとしました。1つは通常のpush_backで、もう1つはboost :: phoenix :: push_backで埋め、これらの行列から少量の値のみを読み取ろうとしました。印刷用の容器に保管してください。怠惰なものは常に空でした。私はフェニックスを間違った方法で使用していますか/それは可能であるはずですか?または、フェニックスのコンテナ/アルゴリズムの機能を誤解しましたか?後者の小さな手がかりは、フェニックスに影響を与えたFP++ライブラリに特別なリストデータ構造が存在することです。

さらに:

  • フェニックスは何に使っていますか?
  • フェニックスに関するいくつかの良いリソースを知っていますか?(チュートリアル、ブログエントリ...)

ご入力いただきありがとうございます。

4

1 に答える 1

4

要求に応じて、回答としての私のコメント(追加と小さな変更を含む)...

私はあなたの立場を正確に知っています、私もフェニックスで遊んでいました(私はあまり深く掘り下げていませんでしたが、ほとんどはBoost :: Spiritチュートリアルを読んだことの副産物です)、機能的なバグを見つけて基本的なHaskellを学んだ直後に-そして私は何も機能しませんでした:(これはダークテンプレートマジックの私の一般的な経験と同期しています:非常に誤解されやすく、混乱し、まったく予期しない動作や理解できないエラーメッセージで顔を殴られます。

長い間フェニックスから離れることをお勧めします。私もFPが好きですが、C ++のFPは、Haskellの可変性よりもさらに醜いです(C ++はすでに醜いですが、少なくともLarry Wallによれば、Haskellはこれまでで最も美しい言語です;))。FPを学び、使用します。FPが得意で、C ++を使用せざるを得ない場合は、Phoenixを使用してください。しかし、学習のために、すでに複雑な言語(つまり、C ++のFP)にまったく異なるパラダイムを追加するライブラリーはお勧めできません。

于 2010-10-04T19:10:13.313 に答える