OCAML如何找到变体的下一个元素

时间:2013-04-05 13:49:05

标签: types ocaml variant

我有 - >键入周= MON | TUE | WED ......我想创建明天第二天返回的功能!例如,如果我调用“明天MON”,该函数将返回TUE。

2 个答案:

答案 0 :(得分:5)

没有内置的语言结构可以让你这样做。所以你应该自己编写这个函数:

let tomorrow = function
  | MON -> TUE
  | TUE -> WED
  ...

另一种可能性是实现这些功能:

val int_of_week: week -> int
val week_of_int: int -> week

碰巧用Obj.magic写这些函数是微不足道的。他们将允许你明天实施:

let tomorrow w =
  week_of_int ((int_of_week w + 1) mod 7)

这可能更接近你的想法。

但这种解决方案不太安全:

    明天
  • 函数假设int_of_week MON = 0,int_of_week TUE = 1等等;
  • 您需要记录不在0到6之间的整数的week_of_int行为;
  • ,最后但并非最不重要的是,Obj.magic实际上并不是该语言的一部分。

答案 1 :(得分:1)

与Haskell不同,您不能只执行deriving(Ord)并致电succ / pred 您必须手动编写这些功能的代码。例如

let tomorrow = function
  | MON -> TUE
  | TUE -> WED
  | (* etc.. *)