Ocaml 应为不同类型的表达式

Ocaml 应为不同类型的表达式,ocaml,Ocaml,我有以下代码: type point = { x : float; y : float; z : float } type dpoint = { dx : float; dy : float; dz : float } type physical_object = { position : point; velocity : dpoint } let move p dp = {x = p.x + dp.x; y = p.y + dp.y; z = p.z + d

我有以下代码:

    type point  = { x : float; y : float; z : float }
    type dpoint = { dx : float; dy : float; dz : float }
    type physical_object = { position : point; velocity : dpoint }
    let move p dp = {x = p.x + dp.x; y = p.y + dp.y; z = p.z + dp.z} 
我得到这个错误:

File "code.ml", line 4, characters 21-24:
Error: This expression has type float but an expression was expected of type
         int
p.x
突出显示

为什么会这样?
我是否没有正确引用记录的字段?

在OCaml中,
+
仅对整数起作用。对于浮动,您必须使用
+。
运算符(带有点后缀)。有关更多详细信息,请参见OCaml中的,例如,
+
仅适用于整数。对于浮动,您必须使用
+。
运算符(带有点后缀)。有关更多详细信息,请参见,例如,运算符
+
具有类型
int->int->int
,因此仅适用于类型
int
的值。对浮动使用
+。
运算符,(对其他操作相应地使用
*。
/。


OCaml没有操作符重载(aka),因为它不能很好地处理类型推断。但是,它使您的代码更加明确,这可以被视为一个优点。

运算符
+
具有类型
int->int->int
,因此仅适用于类型
int
的值。对浮动使用
+。
运算符,(对其他操作相应地使用
*。
/。

OCaml没有操作符重载(aka),因为它不能很好地处理类型推断。然而,它使您的代码更加明确,这是一个好处