я следующий код в OCaml, который производит ошибку «Освобожденный конструктор типа переменной»:OCaml: модуль, класс и тип
module OrderedVar = struct
type t = variable
let compare v1 v2 = v1#get_name - v2#get_name
end
module VarSet = Set.Make(OrderedVar)
class variable n =
object
val mutable name = n
method get_name = name
end
Как я могу объявить тип «переменной»?
Спасибо
редактировать:
поблагодарить вас за ваши ответы, но мой Probleme немного сложнее. На самом деле, у меня есть два модуля и два класса, которые «переплетаются». Здесь я не могу объявить классы «переменные» и «пункта» до модулей, так как они нужны модули:
module OrderedVar = struct
type t = variable
let compare v1 v2 = v1#get_name - v2#get_name
end
module VarSet = Set.Make(OrderedVar)
module OrderedClause = struct
type t = clause
let compare = compare
end
module ClauseSet = Set.Make(OrderedClause)
class variable n =
object
val mutable name = n
val mutable cpos = ClauseSet.empty
method get_name = name
end
class clause =
object
val mutable vpos = VarSet.empty
end
Документация по рекурсивным модулям должна помочь вам определить, как правильно их реализовать. http://caml.inria.fr/pub/docs/manual-ocaml-400/manual021.html#toc75 Хотя вы можете захотеть переосмыслить дизайн, чтобы попытаться избежать этого, если это возможно. Этот пример может быть немного более легким. https://ocaml.janestreet.com/?q=node/84 Важно, чтобы вы использовали и ключевое слово, чтобы объявить два модуля в одном объявлении. – Calvin