我有一个环模块签名。 IntRing(Z)很容易定义,但我想创建IntRingModP(Z_p)。如何在创建模块时将P传递给仿函数进行设置?我可以将值传递给Ocaml中的函数吗?
module IntRing : Ring = struct
type t = int
let zero = 0
let one = 1
let add a b = a+b
let mult a b = a*b
let compare = compare
let equal a b = (a=b)
let to_string = Int.to_string
let print a = print_string (to_string a)
end;;
module IntRingModP (P : Int) : Ring = struct
let p = P
type t = int
let zero = 0 mod p
let one = 1 mod p
let add a b = (a+b) mod p
let mult a b = (a*b) mod p
let compare a b = compare (a mod p) (b mod p)
let equal a b = ((a mod p) = (b mod p))
let to_string a = Int.to_string (a mod p)
let print a = print_string (to_string a)
end;;
这导致File "polynomials.ml", line 25, characters 24-27: Error: Unbound module type Int
你的意思是这样的? http://pastebin.com/uVGZxsD3(我不认为我理解你的问题) –
你指的是'Int',假设它是一个模块,但它是一个模块类型。模块的名称,在你的情况下是'P'。 'P'是一个形式参数,'Int'是它的类型。 – ivg