現在人気のある関数型言語のいずれかがメモ化を適切にサポートしていますか?メモ化の強さから1つを選択する場合、どのようなものをお勧めしますか?その理由は何ですか?
更新:有向グラフ(ノードは関数またはデータである可能性があります)を最適化することを検討しています。グラフ内のノードが更新されたときに、変更されたノードに依存している場合にのみ、他のノードの値を再計算したいと思います。
Update2:無料またはオープンソースの言語/ランタイムが必要です。
現在人気のある関数型言語のいずれかがメモ化を適切にサポートしていますか?メモ化の強さから1つを選択する場合、どのようなものをお勧めしますか?その理由は何ですか?
更新:有向グラフ(ノードは関数またはデータである可能性があります)を最適化することを検討しています。グラフ内のノードが更新されたときに、変更されたノードに依存している場合にのみ、他のノードの値を再計算したいと思います。
Update2:無料またはオープンソースの言語/ランタイムが必要です。
Haskellの場合、ConalElliottが機能メモの試行に関する美しいブログエントリを投稿しました。作業は非常に巧妙で非常に深く、Conalは後でそれをポリモーフィック関数に拡張しました。使用する言語に関係なく、関数型言語でのメモ化の根底にある深いアイデアが明らかになるため、このようなものを強くお勧めします。
ただし、更新を見ると、メモ化が本当に必要なものであるかどうかは明らかではありません。拡張された問題ステートメント(有向グラフを介して更新を伝播する)は、漸増計算のほぼ教科書の例であり、BobHarperとUmutAcarによって多くの作業が行われています。彼らはStandardMLで書かれた無料のライブラリを持っていると思います。自己調整計算に関するUmutのページをご覧ください。
Haskellで、最初にこれを参照してください。
Lispにとって、 これは関連性があると思われるGoogleからの最初のヒットでした。
F#の場合、これから始めるのがよいでしょう。
これで、グーグルが完了しました。この良いサポートはありますか?あなたが決める :-)
ああ、Mathematicaをお勧めしたいのですが、多くの人がその値札に嫌気がさしていることを理解しています。厳密に言えば、関数型プログラミングシステムというよりは、おそらく用語書き換えシステムであり、言葉の意味で純粋ではありません。しかし、それはメモ化を行います。
編集:現時点で多くの牽引力を持っているErlangを忘れました-方法はわかりませんが、メモ化できると思います。
ええ、メモ化はまったく必要ありません。正確な依存関係の追跡が必要です。Haskell機能グラフライブラリ(fgl)を使用して有向グラフを作成し、後継関数を使用して、更新するノードを正確に知ることができます:http: //hackage.haskell.org/cgi-bin/hackage-scripts/package/ fgl
このペーパーは、ドキュメントを理解するのに大いに役立ちます: http ://web.engr.oregonstate.edu/~erwig/fgl/
後継関数は、モジュールData.Graph.Inductive.Graphでsucという名前になります。
別の方向に進むと、これをサポートする人気のある関数型言語の1つがExcelです。:)