此表达式具有float类型,但表达式类型为float选项

时间:2015-03-26 13:09:22

标签: ocaml

您好我需要准备考试,我们的老师给了我们一些工作要做的是我的问题我有一个错误我无法解决。我们正在研究算术表达式,这是我的类型:

type expr_a = Val of float
|Var of string
|Plus of expr_a * expr_a
|Moins of expr_a * expr_a
|Div of expr_a * expr_a
|Mult of expr_a * expr_a
|Umoins of expr_a
|Puiss of float * float
|Sin of expr_a
|Cos of expr_a
|Exp of expr_a
|Ln of expr_a ;;

我已经做了一个显示正在运行的算术表达式的函数,但现在他给了我们一个我们需要使用的函数

let valeuropt v =
if v = "x" then Some(0.)
else if v = "y" then Some(1.)
else None;;

当我尝试使用它时,我得到一个错误:"这个表达式有类型float但是表达式需要类型"          浮动选项

let rec partielle expr = match expr with
Var x -> valeuropt x
|Val x -> x
|Plus (e1,e2) -> (evaluer e1 +. evaluer e2)
|Moins (e1,e2) -> (evaluer e1 -. evaluer e2)
|Div (e1,e2) -> (evaluer e1 /. evaluer e2)
|Mult (e1,e2) -> (evaluer e1 *. evaluer e2)
|Puiss(a,b) -> a**b
|Sin(e) -> sin(evaluer e)
|Cos(e) -> cos(evaluer e)
|Exp(e) -> exp(evaluer e)
|Ln(e) -> log(evaluer e)
|Umoins(e) -> -. evaluer e;; 

1 个答案:

答案 0 :(得分:3)

如您所见,valeuropt返回类型float option的值,其基本上意味着“可能是包含浮点数的值,可能是包含任何内容的值”。

但是,在您的代码中,您将其视为会返回与float不兼容的float option

我想你的老师希望你提供一个partielle函数,它会返回float option(取决于它对禁用变量的使用)。

后面的功能(以及其他看起来像这样的功能)可能对该任务有所帮助:

let map_opt f x =
 match x with
 | None -> None
 | Some y -> Some (f y)