【问题标题】:Function that evaluates mathematical expression计算数学表达式的函数
【发布时间】: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));;

这是我得到的错误, 错误:此表达式具有浮点类型,但表达式应为类型 诠释

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

【问题讨论】:

  • xy 不需要乘以一。

标签: ocaml


【解决方案1】:

两个浮点数相乘的运算符是*.。添加两个浮点数的运算符是+.。并且,两个浮点数相除的运算符是/.

【讨论】:

  • 是的,10 分钟前刚刚在谷歌上搜索过,谢谢现在工作
  • @AnatoliySokolov 你应该将此答案标记为正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 2016-05-26
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2014-03-09
  • 2011-11-07
相关资源
最近更新 更多