为什么只有在负整数上应用函数时,Ocaml才会抛出此“表达式为int类型”错误

时间:2016-11-01 11:54:55

标签: ocaml typing

让我先解释一下我要做的事情。我正在学习Ocaml类型,并且我定义了一个新类型,比如int2int相同。

# type int2 = int;;
type int2 = int

到目前为止一切顺利。

现在我想定义一个名为add_five的函数,该函数接受int类型的参数并返回类型为int2的值

# let add_five (x : int) = (x + 5 : int2);;
val add_five : int -> int2 = <fun>

大!现在我想将其应用于一个正数和一个负数以确认它是否正常工作。

# add_five 5;;
- : int2 = 10

这工作正常!

# add_five -7;;
Error: This expression has type int -> int2
       but an expression was expected of type int

什么?我不明白为什么会这样。我明确告诉Ocaml我想要一个int2类型的返回函数,那么为什么它声称它需要是int类型的?

1 个答案:

答案 0 :(得分:4)

add_five -7被解析为(add_five) - (7),即-运算符为中缀。因此,add_five应该可以从中减去7,即int类型的值。解决方案是将其括号(-7)或使用中缀形式的否定~-7