我想构建一个通用矩阵模块,它包括诸如length,width,size,read_element,write_element等常规操作。因为矩阵可以用几种类型定义:element array array
,{{1或者element list list
,这个模块的优点是处理其中的矩阵类型的细节,而不是在调用模块的级别上。目前,我想到的事情如下:
map
所以从外面来看,可以写:
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
,然后将其放入仿函数中以创建MyInt
...我发现它是多余的......有没有办法直接实例化矩阵其元素的类型为MatInt
的模块?
2)考虑到int
中的内容,有没有办法实现矩阵模块,以便它同时处理矩阵类型的不同可能性?也许是模式匹配?
希望我的问题清楚,有人可以帮忙吗?
答案 0 :(得分:1)
关于问题#1:您不必定义MyInt模块,您可以通过以下方式删除该步骤:
module MatInt = Matrix(struct type t = int end)