Я просто определить модуль матрицы следующим образом:полиморфного типа внутри модуля (OCaml)
module Matrix =
struct
type element
type t = element array array
let make (nr: int) (nc: int) (init: element) : t =
let result = Array.make nr (Array.make nc init) in
for i = 0 to nr - 1 do
result.(i) <- Array.make nc init
done;
result
end
И let m = Matrix.make 3 4 0
дает мне ошибку Error: This expression has type int but an expression was expected of type Matrix.element
. Затем я добавил 'a
:
module Matrix =
struct
type element = 'a
type t = element array array
let make (nr: int) (nc: int) (init: element) : t =
let result = Array.make nr (Array.make nc init) in
for i = 0 to nr - 1 do
result.(i) <- Array.make nc init
done;
result
end
Компиляция модуля выдает ошибку Error: Unbound type parameter 'a
.
Может ли кто-нибудь сказать мне, как определить тип внутри моего модуля?
У меня есть вопрос, можно ли сделать: 'модуль Element = STRUCT типа«а т =»а пусть сравнить = сравнить конец ;; модуль ElementMap = Map.Make (Element) '? Я получаю сообщение «Ошибка: несоответствие подписи:» – codablank1
Это невозможно, потому что Map.Make ожидает тип с типом параметра t. Для этого вам понадобится другая версия Карты. –