“增加”创建的类型

问题描述 投票:1回答:2

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

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

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

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

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

types ocaml increment
2个回答
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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.