長さ、幅、サイズ、read_element、write_elementなどの一般的な操作を含む一般的な行列モジュールを作成したいと考えています。行列はいくつかの型で定義することができます:element array array
、element list list
またはmap
である場合、このモジュールの利点は、内部の行列のタイプの詳細を処理し、モジュールが呼び出されるレベルを気にしないことです。OCamlで行列モジュールを定義する
module type A_TYPE =
sig
type t
end;;
module matrix =
functor (Elt: A_TYPE)
struct
type element = Elt.t
type t = element array array
(* `element list list` if I want a matrix to be a list of a list *)
let length (m: t) : int =
Array.length a
(* `List.length a` if t = element list list *)
... ...
end
をだから、外部から、1を書くことができます:現時点では、私は次のように何かを考える
module MyInt = struct type t = int end
module MatInt = Matrix(MyInt)
module MyFloat = struct type t = float end
module MatFloat = Matrix(MyFloat)
let m = MatInt.make 3 4 0
let n = MatFloat.make 3 4 0.2
私の質問は以下のとおりです。
1)私は最初のモジュールを定義する必要がMyInt
をファンクタに入れてMatInt
を作成してください...冗長になっています...タイプがint
の行列モジュールを直接インスタンス化する方法はありますか?
2)(* ... *)
に書かれている内容を考慮して、マトリクスモジュールを実装する方法はありますか?同時に、マトリクスのタイプのさまざまな可能性を同時に処理する方法がありますか?多分パターンマッチングで?
私の質問は明確ですが、誰でも手伝ってもらえますか?質問#1については
をあなたは車輪の再発明ているように私は感じます。 Polkaを見てくださいhttp://pop-art.inrialpes.fr/~bjeannet/newpolka/html/polka_72.html#SEC97 – pad
@pad:この[質問](http:// stackoverflow。 com/questions/8865283/using-matrix-module-of-polka-in-ocaml)?ありがとう – SoftTimur
申し訳ありませんが、私はポルカを使用しません。モジュールの署名が要件に完全に一致するため、ここで言及します。 – pad