我有 -> 类型 week = MON | 周二 | WED......我想明天创建第二天返回的函数!例如,如果我调用“明天 MON”,该函数将返回 TUE。
问问题
251 次
2 回答
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 实际上并不是该语言的一部分。
于 2013-04-05T14:07:22.217 回答
1
与 Haskell 不同,您不能只做deriving(Ord)
和调用succ
/pred
您必须手动编写这些函数。例如
let tomorrow = function
| MON -> TUE
| TUE -> WED
| (* etc.. *)
于 2013-04-05T14:05:33.190 回答