【发布时间】:2015-01-27 03:32:34
【问题描述】:
我需要创建一个函数,返回计算创建类型表达式的结果:
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));;
这是我得到的错误, 错误:此表达式具有浮点类型,但表达式应为类型 诠释
我如何让函数返回一个浮点数,我知道它需要认为每个案例的每个返回值都需要是一个浮点数,但我不知道该怎么做
【问题讨论】:
-
x或y不需要乘以一。
标签: ocaml