我需要创建一个函数来返回计算已创建类型的表达式的结果:
type expr =
VarX
| VarY
| Sine of expr
| Cosine of expr
| Average of expr * expr
| Times of expr * expr
| Thresh of expr * expr * expr * expr
这是函数应该做的事情: eval:expr * float * float - > float取三元组(e,x,y)并在x,y点计算表达式e。 x和y将介于-1和1之间,函数的结果将在相同的区间内。实现该功能后,您应该在OCaml提示符下获得以下行为:
# eval (Sine(Average(VarX,VarY)),0.5,-0.5);;
- :float = 0.0
这是我写的函数需要返回一个浮点数:
let rec eval (e,x,y) = match e with
VarX -> x*1.0
|VarY ->y*1.0
|Sine expr -> sin(pi* eval (expr,x,y))
|Cosine expr -> cos( pi* eval (expr,x,y))
|Average (expr1, expr2) -> (eval (expr1,x,y)+eval (expr2,x,y))/2.0
|Times (expr1, expr2) -> (eval (expr1,x,y))*(eval (expr2,x,y))
|Thresh (expr1, expr2, expr3, expr4) ->if((eval (expr1,x,y))<(eval (expr2,x,y)))then (eval (expr3,x,y)) else(eval (expr4,x,y));;
这是我得到的错误, 错误:此表达式具有float类型,但表达式需要类型 INT
我如何让函数返回一个浮点数,我知道它需要认为每个案例的每个返回值都需要浮点数,但我不知道该怎么做
答案 0 :(得分:2)
乘以两个浮点数的运算符为*.
。添加两个浮点数的运算符为+.
。并且,用于划分两个浮点数的运算符是/.