hackageDB には数値用の Haskell ライブラリがあります: hmatrix。LAPACK、BLAS、および GSL (GNU Scientific Library) から描画されます。
ただし、命令型アルゴリズムは、モナド (より具体的には状態変換子) を使用して純粋関数型言語に簡単に変換できることを覚えておく必要があります。実際、効率的なインプレース実装では、通常、このようなメカニズムを使用して、純粋関数型言語で変更可能な変数を提供する必要があります。
機能的なスタイルを踏襲することは、多くの場合不可能です。多くの問題について、既知の (効率的な) 機能的アプローチはありません。もちろん、そのようなアルゴリズムをたとえば Haskell で動作させることはできますが、Matlab、Fortran、または C で記述された場合とあまり変わらないように見えます。
編集:
これは明らかな非互換性であると同時に、最初に発生した問題でもあります。
- 通常、効率的な数値アルゴリズムには可変データが必要です。これは純粋に機能的な設定では可能ですが、命令型言語ほど簡単ではありません。しかし、2 つの計算モデルは完全に同等です。
- 基礎となるマシン (例: 命令セット) は常に必須であり、例外はほとんどありません (!)。実際のマシンがモデル化される方法を考えると、命令型にコーディングされたアルゴリズムは分析と最適化が容易です。
- 基礎となる数学により関数解を比較的簡単に導出できますが、効率的なアルゴリズムは得られません (数学から命令解を直接導出する場合と同様)。ほとんどの努力はこれまでも今も命令的な解決策に向けられているため、機能的な解決策はまったく知られていません。機能的な対応物とは、機能的な意図とスタイルを適切に表現するコードを意味します。
- 再利用できる命令型コードはたくさんあります。その多くは、状態トランスフォーマーを使用して関数型言語に変換できますが、それでも必須に見えます。
実際、Haskell のような純粋関数型言語は、アルゴリズムのコーディングに有益であると考えています。数学的な記述、アルゴリズム自体、ある種の型指向の証明 (つまり、Curry-Howard isomorphismを使用) をコードの同じチャンクに統合できます。 .