質問

ブーストフェニックスライブラリ(スピリットプロジェクトに隠されている)と、機能プログラミングスタイルのファン(まだアマチュア、ハスケルとスキームの小さな経験)について知りました。約 このライブラリの合理的なアプリケーション。

FPスタイルを使用してコードの表現力と明確さの増加に加えて、私は特に 低コストで計算をスピードアップするための怠zyな評価に興味があります。

小さくて簡単な例は次のとおりです。ユークリエの距離マトリックスを使用しているいくつかの種類のルーティング問題(TSPなど)があります。距離マトリックスの値の一部は使用されず、一部は非常に頻繁に使用されると仮定します(そのため、通話ごとにその場で計算することは良い考えではありません)。今では、 怠zyなデータ構造 距離値を保持します。フェニックスではそれはどのように可能ですか? (FPスタイルのプログラミングなしで簡単に完了するという事実を無視してください)フェニックスの公式文書を読むことは、私にそれに答えるのに十分理解させませんでした。

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

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

さらに:

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

ご意見ありがとうございます!

役に立ちましたか?

解決

要求されているように、私のコメント(追加と小さな変更を伴う)答えとして...

私はあなたの立場を正確に知っています、私もフェニックスと遊んでいました(私はあまり深く掘り下げませんでしたが、主にブーストを読むことの副産物::スピリットチュートリアルを読んでいません)、比較的すぐに機能的なバグをキャッチし、基本的なhaskellを学習した後すぐに - そして、私は何も機能しませんでした:(これは、暗いテンプレートの魔法の一般的な経験と同期しているところです。非常に簡単に誤解し、ねじ込み、まったく予期しない動作または理解できないエラーメッセージで顔をパンチします。

私はあなたがフェニックスから長い間離れているようにあなたにアドバイスします。私もFPが好きですが、C ++のFPはHaskellの可変性よりもさらにugです(彼らは頭から頭になるでしょうが、C ++はすでに醜く、Haskellは少なくともこれまでで最も美しい言語です;))。 FPを学び、使用し、あなたがそれが得意で、C ++を使用することを余儀なくされたら、Phoenixを使用してください。しかし、学習には、すでに複雑な言語で完全に異なるパラダイムをボルトで固定するライブラリ(つまり、C ++のFP)はお勧めできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top