如何将OCaml整数类型限制为整数范围?

伊万(Ivan Uemlianin)

在阅读Real World OCaml的书时,我遇到了以下类型声明(第6章:变体):

# type color =
  | Basic of basic_color * weight (* basic colors, regular and bold *)
  | RGB   of int * int * int       (* 6x6x6 color cube *)
  | Gray  of int                   (* 24 grayscale levels *)
;;

type color =
    Basic of basic_color * weight
  | RGB of int * int * int
  | Gray of int

我认为可以进一步限制RGB和Gray变体。例如,RGB元组中的每个int只能具有值0-5。

在Erlang中,我会这样做:

-type rgbint() :: 0 | 1 | 2 | 3 | 4 | 5.
-type rgb() :: {rgb_int(), rgb_int(), rgb_int().

但是,当我在OCaml(在utop中)尝试此操作时,它抱怨:

# type rgbint = 0 | 1 | 2 | 3 | 4 | 5 ;;

Error: Parse error: [type_kind] expected after "=" (in [opt_eq_pluseq_ctyp]) 

问题:

  • 在OCaml中,是否不允许在类型定义的RHS上使用文字?
  • 我如何在OCaml中执行类似上述Erlang rgbint()的定义?

衷心的祝福

伊万

杰弗里·斯科菲尔德

通过某种基本类型的值列表定义类型是有意义的,但是OCaml没有这样的类型。它具有一组像int的原始类型char您可以定义自己的新基本类型,其值是诸如Yes和的文字No(当定义这样的文字时,它看起来像是大写的标识符。)您可以将它们与参数化类型(如列表,数组等)结合使用。

如果您确实希望将int值限制在某个范围内,则可以将其定义为模块接口隐藏的抽象类型。在模块中,您需要定义要在有限的整数范围内支持的所有操作。(请注意,此类类型不会在常规算术运算中关闭。)

您还可以定义:

type rgbint = RBG0 | RGB1 | RGB2 | RGB3 | RGB4 | RGB5

在实践中,这可能最终会做,尽管当您将基础值视为数字时,这种类型会很麻烦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将输入整数限制为1到9

来自分类Dev

将文字限制为整数类型(XML / RDF)

来自分类Dev

如何将范围限制为clicked元素?

来自分类Dev

如何将EditTextPreference限制为范围1024:65535

来自分类Dev

如何将Java范围限制为子类?

来自分类Dev

如何将GMSPlacePicker限制为仅指定的地点类型?

来自分类Dev

如何将Swift协议限制为具体类型?

来自分类Dev

如何使用C#泛型将方法限制为整数类型并仍然使用运算符

来自分类Dev

如何将颜色范围映射到整数范围?

来自分类Dev

如何将整数类型转换为无符号类型?

来自分类Dev

如何将整数“范围”放在OWL文字值中?

来自分类Dev

如何将整数范围转换为 PHP 数组

来自分类Dev

如何将类型限制为特征中的抽象类型成员?

来自分类Dev

如何将属性的类型限制为预定义的两种类型(UIColor或CAGradientLayer)

来自分类Dev

将Kendo UI微调器限制为不带小数的整数

来自分类Dev

将scipy.optimize.minimize限制为整数值

来自分类Dev

C ++将输入限制为整数,因此字母无效

来自分类Dev

将文字限制为整数和一半

来自分类Dev

如何将嵌套文档的日期直方图聚合限制为特定日期范围?

来自分类Dev

如何将多播的范围明确地限制为仅1跳?

来自分类Dev

如何将功能范围限制为与c ++中定义的文件相同的文件?

来自分类Dev

如何将多播的范围明确地限制为仅1跳?

来自分类Dev

如何将Date数据类型转换为整数?

来自分类Dev

如何将序列乘以'float'类型的非整数?

来自分类Dev

如何将类型的值按顺序链接到整数?

来自分类Dev

如何将泛型参数的类型限制为Typescript函数以成为枚举

来自分类Dev

如何将类作用域的类型参数限制为基本包装(数字)和String?

来自分类Dev

在Swift中,如何将函数一般地限制为理解T + T的类型

来自分类Dev

如何将参数限制为变量类型的一个变量

Related 相关文章

  1. 1

    如何将输入整数限制为1到9

  2. 2

    将文字限制为整数类型(XML / RDF)

  3. 3

    如何将范围限制为clicked元素?

  4. 4

    如何将EditTextPreference限制为范围1024:65535

  5. 5

    如何将Java范围限制为子类?

  6. 6

    如何将GMSPlacePicker限制为仅指定的地点类型?

  7. 7

    如何将Swift协议限制为具体类型?

  8. 8

    如何使用C#泛型将方法限制为整数类型并仍然使用运算符

  9. 9

    如何将颜色范围映射到整数范围?

  10. 10

    如何将整数类型转换为无符号类型?

  11. 11

    如何将整数“范围”放在OWL文字值中?

  12. 12

    如何将整数范围转换为 PHP 数组

  13. 13

    如何将类型限制为特征中的抽象类型成员?

  14. 14

    如何将属性的类型限制为预定义的两种类型(UIColor或CAGradientLayer)

  15. 15

    将Kendo UI微调器限制为不带小数的整数

  16. 16

    将scipy.optimize.minimize限制为整数值

  17. 17

    C ++将输入限制为整数,因此字母无效

  18. 18

    将文字限制为整数和一半

  19. 19

    如何将嵌套文档的日期直方图聚合限制为特定日期范围?

  20. 20

    如何将多播的范围明确地限制为仅1跳?

  21. 21

    如何将功能范围限制为与c ++中定义的文件相同的文件?

  22. 22

    如何将多播的范围明确地限制为仅1跳?

  23. 23

    如何将Date数据类型转换为整数?

  24. 24

    如何将序列乘以'float'类型的非整数?

  25. 25

    如何将类型的值按顺序链接到整数?

  26. 26

    如何将泛型参数的类型限制为Typescript函数以成为枚举

  27. 27

    如何将类作用域的类型参数限制为基本包装(数字)和String?

  28. 28

    在Swift中,如何将函数一般地限制为理解T + T的类型

  29. 29

    如何将参数限制为变量类型的一个变量

热门标签

归档