0

我是 OCaml 的新手,我只是在学习它。我正在尝试执行一个简单的函数来计算(a+b)^2(a-b)^2基于ab

我正在尝试具有如下功能

let a_squared_b a b = 
if(a<0 || b<0) then 
(a**2 + b**2 + 2*a*b) 
 else 
(a**2 + b**2 - 2*a*b);;

返回警告

Error: This expression has type int but 
an expression was expected of type float

所以我尝试了下面的一个:

let a_squared_b (a:float) (b:float) : float = 
if(a<0 || b<0) 
then (a**2 + b**2 + 2*a*b) 
else (a**2 + b**2 - 2*a*b);;

这也警告了一些事情。因此,我继续检查该函数是否至少可以工作,但它返回错误的结果 -

a_squared_b 2 2;;
- : int = 0         

我不确定我做错了什么,任何帮助将不胜感激

4

1 回答 1

2

简而言之,OCaml 对整数和浮点数使用不同的运算符,即, ( *. )instead ( * )(+.)instead(+)等。您还应该使用2.而不是2获取浮点类型的“变量”。

# let a_squared_b (a:float) (b:float) : float = if(a<0. || b<0.) then (a**2. +. b**2. +. 2. *. a*. b) else (a**2. +. b**2. -. 2. *. a*. b);; val a_squared_b : float -> float -> float = <fun>
# a_squared_b 2. 2.;;

您可以获得更多信息,例如

于 2014-03-10T14:59:02.877 回答