评估数学表达式的函数

时间:2015-01-27 03:32:35

标签: ocaml

我需要创建一个函数来返回计算已创建类型的表达式的结果:

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

我如何让函数返回一个浮点数,我知道它需要认为每个案例的每个返回值都需要浮点数,但我不知道该怎么做

1 个答案:

答案 0 :(得分:2)

乘以两个浮点数的运算符为*.。添加两个浮点数的运算符为+.。并且,用于划分两个浮点数的运算符是/.