为什么我对用户定义类型的转换不起作用?

Why my cast on user def type doesnt work?

type card = int

type game = { dimension : int; p1 : card list; }

let fn (_dimension : int) (p1 : card list) : bool =
  (int)p1 = (int)_dimension * 2

我想检查 p1 是否恰好是维度大小的两倍。

您的代码看起来不太像 OCaml 代码,因此很难知道如何提供帮助:-)

OCaml 中没有更改值类型的操作。这在强类型语言中没有意义。您可以使用类型做一些事情,但“转换”不是其中之一。

因此,不存在类似于 (int) expr 的有效表达式。正如@glennsl 指出的那样,有一个 returns 列表长度的函数。如果这就是您要计算的内容,则可以使用 List.length _dimension。您可以删除其他出现的 (int)。它们不是有效的 OCaml。

您对 fn 的定义没有在任何地方使用类型 game,因此 game 的定义是不必要的。但是,这让我担心您期望定义会产生影响。

如果您在 fn 的定义中省略所有类型归属,编译器将为您的函数推断出最通用的类​​型。这意味着您可以使用任何列表调用它来检查其长度。这在 OCaml 中会更加地道。也就是说,您不需要指定 p1 是卡片列表。该函数对任何列表都有意义。