【问题标题】:This expression has type float but an expression was expected of type float option此表达式的类型为 float,但表达式应为 float 类型的选项
【发布时间】:2015-03-26 21:24:52
【问题描述】:

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

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

当我尝试使用它时,我得到一个错误:“这个表达式的类型是浮点数,但表达式应该是类型” 浮动选项

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

【问题讨论】:

  • partielle 调用evaluer 正常吗?不应该叫partielle吗?

标签: ocaml


【解决方案1】:

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

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

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

后面的函数(以及其他类似的函数)可能对这项任务有所帮助:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多