我正在尝试在OCaml中实现纸牌游戏。
type rank = Three | Four | Five | Six;;
(我简化)我的问题是: 是否可以从排名(例如四)访问以下/上一个? (五/三)
我测试了一些东西,发现我们可以与compare > < =
不同的等级进行比较。因此,知道订单存在,也许增量过程可能是排名?
(如果没有解决方案,我可以做一个与大匹配的功能,并告诉每个等级返回什么,但是如果存在最快的解决方案......)
答案 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这样的函数。