(* * expr.sml * cs334 *) (* Magic constant to make datatypes print out fully *) Control.Print.printDepth:= 100; Control.Print.printLength:= 100; datatype Expr = VarX | VarY | Sine of Expr | Cosine of Expr | Average of Expr * Expr | Times of Expr * Expr; (* build functions: Use these helper functions to generate elements of the Expr datatype rather than using the constructors directly. This provides a little more modularity in the design of your program *) fun buildX() = VarX; fun buildY() = VarY; fun buildSine(e) = Sine(e); fun buildCosine(e) = Cosine(e); fun buildAverage(e1,e2) = Average(e1,e2); fun buildTimes(e1,e2) = Times(e1,e2); (* exprToString : Expr -> string Complete this function to convert an Expr to a string *) fun exprToString e = "not written"; (* eval : Expr -> real*real -> real Evaluator for expressions in x and y *) fun eval e (x,y) = 0.0; val sampleExpr = buildCosine(buildSine(buildTimes(buildCosine(buildAverage(buildCosine( buildX()),buildTimes(buildCosine (buildCosine (buildAverage (buildTimes (buildY(),buildY()),buildCosine (buildX())))), buildCosine (buildTimes (buildSine (buildCosine (buildY())),buildAverage (buildSine (buildX()), buildTimes (buildX(),buildX()))))))),buildY()))); (************** Add Testing Code Here ***************)