我是OCaml的初学者。我想编译此代码,但出现错误。
type pointeur_de_code = int;;
type environnement = int;;
type mlvalue =
| Ml1 of int
| Ml2 of pointeur_de_code * environnement;;
let (accu:mlvalue) = ref 0;;
此表达式的类型为int ref,但期望表达式的类型为mlvalue
答案 0 :(得分:2)
当您定义诸如mlvalue
之类的变量类型时,您将为该类型的值定义构造函数。您有一个名为Ml1
的构造函数,该构造函数接受一个int
并生成一个值。并且您有一个名为Ml2
的构造函数,它需要两个int
并产生一个值。
要生成该类型的值,您需要包括构造函数。
此外,您的accu
的类型不能为mlvalue
。它必须是mlvalue ref
,这是另一种类型。
let accu : mlvalue ref = ref (Ml1 0)
(请注意,您不需要提供accu
的类型。OCaml会为您推断类型。)