線形代数用の Java ライブラリはたくさんありますが、Clojure には現在、記号演算のサポートを含む慣用的なコンピューター代数システムがありません。手始めに、簡単なことに取り組み始めることができると思います。
最初のステップとして、データ構造を正しくすることが良いスタートになると思います。
ステップ 1: 永続的なマトリックスを実装する
deftype
(または)を使用reify
しますが、今のところ、実装を容易にするために、ストレージにハッシュマップを使用します (そのほうがよいと思われるが、トレードオフがある場合は別の方法を提案してください)。(配列の使用、外部 Java ライブラリへの委任、ある種のトランジェント インターフェイスの実装など、パフォーマンス要件に応じてさまざまな実装を想像できます。)
私の質問は、どのインターフェイス/プロトコルを実装することを検討すべきですか? (一般に、clojure が使用するすべてのプロトコル/インターフェースの適切なリストは何ですか?) また、これらの実装方法に関するアドバイスはありますか?
実装する私のリスト:
-不変の方法でマトリックスのセクションを変更するには、関連付けが役立ちます
-行列を要素のアクセサーとしての関数として扱い、2つのタプルを渡して単一の要素、単一の値(幅* y + xによるインデックス)、ハッシュマップを渡して列、行を取得できると考えていました。またはマイナー、カスタム クエリ ハッシュマップ/言語を介して。
現時点での私の目標は、実装を柔軟に選択できるようにする優れた抽象化を設計することです。