尝试平均变量的语法错误

Syntax error trying to average variables

我刚开始尝试学习 OCaml。我写了一个函数来获取两个浮点数和 return 它们的平均值,但是我遇到了语法错误。

let average a b =
  (a +. b) /. 2.0;;

print_float (average 5.0 -5.0);;

声明的错误是

This expression has type float -> float but an expression was expected of type int.

还有下划线"average 5.0"。 OCaml 是 4.01.0 版本,系统是 ubuntu 14.10.

我只是在这里尝试一下。通过查看您的代码并在在线编译器上进行尝试,我得到了以下结果。

# let average a b =
#   (a +. b) /. 2.0;;
val average : float -> float -> float = <fun>
# average 5.0 6.0;;
- : float = 5.5
# average 5.0 -6.0;;
File "", line 1, characters 0-11:
Error: This expression has type float -> float
       but an expression was expected of type int
#

当其中一个值是负浮点数时抛出错误。请往那个方向检查。

如果你想避免额外的括号,你可以使用一元浮动否定运算符~-.

$ ocaml
        OCaml version 4.01.0

# let average a b =
  (a +. b) /. 2.0;;
val average : float -> float -> float = <fun>
# print_float (average 5.0  ~-. 5.0);;
0.- : unit = ()
#

但是,这个运算符看起来很笨拙,我从未在实际代码中见过它。所以有时你需要使用带负数的括号。

我做了一些阅读和实验,并写下了所有减法和求反运算符的描述:Unary minus and floating point number in OCaml