首页 > 解决方案 > 如何评估 float_of_int -3?

问题描述

# float_of_int -3;;
Error: This expression has type int -> float
       but an expression was expected of type int

我认为函数应用程序具有最高优先级,因此float_of_int -3等于float_of_int (-3). 为什么我需要明确地将括号放在那里以抑制错误?

标签: ocaml

解决方案


正是由于这个原因,该函数应用程序具有比中缀运算符更高的优先级,您必须添加括号。

换句话说,函数应用是贪婪的,它会消耗所有的术语,直到它到达一个中缀运算符,例如,

 f x y z + g p q r

被解析为(f x y z) + (g p q r)

你的例子也是如此,

 float_of_int - 3

被解析为

(float_of_int) - (3)

您的另一个选择是使用特殊的前缀运算符~-,例如,

float_of_int ~-1

它比函数应用程序具有更高的优先级(绑定更紧密)。


推荐阅读