Я хотел бы построить общий матричный модуль, который включает такие общие операции, как длина, ширина, размер, 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
Так снаружи, можно написать:
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) Принимая во внимание то, что написано в (* ... *)
, существует ли способ реализовать матричный модуль таким образом, чтобы он одновременно обрабатывал различные возможности типа матрицы? возможно, с шаблоном?
Надеюсь, мои вопросы ясны, может ли кто-нибудь помочь?
Я чувствую, что вы заново изобретать колесо. Взгляните на Polka http://pop-art.inrialpes.fr/~bjeannet/newpolka/html/polka_72.html#SEC97 – pad
@pad: есть ли у вас какие-либо идеи об этом [вопрос] (http: // stackoverflow. ком/вопросы/8865283/с помощью матрицы--модуль-оф-польки-в-OCaml)? Спасибо – SoftTimur
Извините, я не пользуюсь Полькой. Я упоминаю это здесь, потому что его подпись модуля отлично соответствует вашим требованиям. – pad