尝试平均变量时出现语法错误

时间:2015-01-16 04:52:11

标签: ocaml

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

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.

并且有一行强调"平均5.0"。 OCaml是版本4.01.0,系统是ubuntu 14.10。

2 个答案:

答案 0 :(得分:4)

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

$ 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

答案 1 :(得分:0)

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

# 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
#

当其中一个值为负浮点数时,将引发错误。请检查那个方向。

相关问题