ocaml变种类型操纵

Git*_*tmo 2 ocaml

我有这样的变体类型:

type score = 
    InInteger of int
    | InFloat of float ;;
Run Code Online (Sandbox Code Playgroud)

现在,给出两个分数(InInteger(5)InFloat(5.5)),我想添加,减去它们等.

如何才能做到这一点?

PS - 我是OCaml的新手.

编辑::

进一步来说:

这是如何运作的?

let n = InInt(2);;
let m = InFloat(3.2);;

let var = InFloat(float n +.  m);;
Run Code Online (Sandbox Code Playgroud)

pad*_*pad 5

首先,受歧视的联盟需要以大写字母开头的标识符:

type score = 
    InInteger of int
    | InFloat of float
Run Code Online (Sandbox Code Playgroud)

其次,您可以add通过匹配所有可能情况的模式并返回适当的值来定义此数据类型的函数:

let add s1 s2 = 
    match s1, s2 with
    | InInteger i1, InInteger i2 -> InInteger (i1 + i2)
    | InInteger i1, InFloat f2   -> InFloat (float i1 +. f2)
    | InFloat f1, InInteger i2   -> InFloat (f1 +. float i2)
    | InFloat f1, InFloat f2     -> InFloat (f1 +. f2)
Run Code Online (Sandbox Code Playgroud)

  • OCaml是一种强类型语言,但它推断类型,因此您通常不必指定它们.一种方法是通过了解所有函数的参数和返回类型.要使其工作,您需要有两个不同的函数来添加整数和添加浮点数.因此,(+)是添加整数的函数,(+.)是添加浮点数的函数.还有其他方法可以使用类型推断来处理不同类型的数字,但这是OCaml执行此操作的方式. (4认同)