我有一個環模塊簽名。 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