Anatoliy Sokolov
Anatoliy Sokolov

Reputation: 397

Function that evaluates mathematical expression

I need to create a function that returns the result of calculating expressions of a created type:

type expr =
      VarX
    | VarY
    | Sine of expr
    | Cosine of expr
    | Average of expr * expr
    | Times of expr * expr
    | Thresh of expr * expr * expr * expr 

here is what the function is supposed to do : eval : expr * float * float -> float that takes an triple (e,x,y) and evaluates the expression e at the point x,y . x and y are going to be between -1 and 1 and the result of the function will be in the same interval. Once you have implemented the function, you should get the following behavior at the OCaml prompt:

 # eval (Sine(Average(VarX,VarY)),0.5,-0.5);;
    - :float = 0.0 

Here is the function that I wrote it needs to return a float:

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));;

this is the error that i get, Error: This expression has type float but an expression was expected of type int

how do i make the function return a float, i know it needs to think that every return value for each case needs to be a float but im not sure how to do that

Upvotes: 0

Views: 611

Answers (1)

Jeffrey Scofield
Jeffrey Scofield

Reputation: 66803

The operator for multiplying two floats is *.. The operator for adding two floats is +.. And, the operator for dividing two floats is /.

Upvotes: 2

Related Questions