acabo de definir un módulo de matriz de la siguiente manera:tipo de polimorfismo dentro de un módulo (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
Y let m = Matrix.make 3 4 0
me da un error Error: This expression has type int but an expression was expected of type Matrix.element
. Luego añade '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
La compilación del módulo da un error Error: Unbound type parameter 'a
.
¿Alguien podría decirme cómo definir el tipo dentro de mi módulo?
Tengo una pregunta, ¿es posible hacer: 'elemento de módulo = estructura tipo 'A t =' a vamos comparan = comparan final ;; módulo ElementMap = Map.Make (Element) '? Obtengo "Error: falta de coincidencia de firma:" – codablank1
Eso no es posible, porque Map.Make espera un tipo de parámetro t. Necesitarías una versión diferente de Map para hacerlo posible. –