为什么类型的星号超载?

时间:2013-01-22 08:34:39

标签: operator-overloading ocaml cartesian-product

我仍然不明白动机。

为什么他们分别为两个不同的运算符(**.)进行整数乘法和浮点运算,好像他们害怕重载一样,但同时他们使用*来表示类型的笛卡尔积?

type a = int * int ;;

为什么他们突然变得如此勇敢?为什么不写

type a = int *.. int ;;

还是什么?

是否存在一些关系,这使得笛卡尔积更接近整数乘积并且远离浮动乘积?

2 个答案:

答案 0 :(得分:9)

它没有超载,在type t =的右侧你定义了另一种概念,你定义的是一种类型,而不是一种价值。

在类似ML的语言中,您可以看到两种不同的语言:

  1. 允许您定义类型的类型语言(值的结构规范)。
  2. 允许您定义值的值的语言(对应于类型的实际值,函数也是值)。这就是评估的内容。
  3. 由于这两种语言的领域实际上是分开的,因此在每种语言中重复使用类似的句法结构时没有理论上的问题/模糊性,因此与重载完全无关。

答案 1 :(得分:1)

在数学中,您使用乘法字符注意笛卡尔积。因此,在OCaml中以相同的方式记录它是逻辑...