“增加”创建的类型

时间:2018-01-03 17:59:38

标签: types ocaml increment

我正在尝试在OCaml中实现纸牌游戏。

type rank = Three | Four | Five | Six;;

(我简化)我的问题是: 是否可以从排名(例如四)访问以下/上一个? (五/三)

我测试了一些东西,发现我们可以与compare > < =不同的等级进行比较。因此,知道订单存在,也许增量过程可能是排名?

(如果没有解决方案,我可以做一个与大匹配的功能,并告诉每个等级返回什么,但是如果存在最快的解决方案......)

2 个答案:

答案 0 :(得分:2)

您可以使用ppx_deriving定义枚举类型,轻松访问基础整数值。

<强>更新

我从未使用过ppx_deriving,所以我想我会尝试一下。这是一个适合我的代码:

type cards = Five [@value 5] | Six | Seven [@@deriving enum]

let apply_enum fn card =
    match cards_of_enum (fn (cards_to_enum card)) with
    | None -> failwith "apply_enum: no such value"
    | Some p -> p

let predecessor card = apply_enum (fun x -> x - 1) card
let successor card = apply_enum ((+) 1) card

答案 1 :(得分:0)

所以我们有点被迫使用整数,而且我的类型没有那么多的可能性,所以我决定做一个函数rankToInt,每个等级关联一个int。我真的不需要更多我必须做的事情,但我知道更好的解决方案是定义一个类型等级,其中包含一个整数值,我们不必每次都调用像rankToInt这样的函数。