ocaml - 为什么我对用户 def 类型的强制转换不起作用?
问题描述
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 指出的那样,有一个函数可以返回列表的长度。如果这是您要计算的内容,则可以使用List.length _dimension
. 其他出现的(int)
你可以删除。它们不是有效的 OCaml。
您的定义在任何地方fn
都没有使用类型game
,因此game
不需要定义。但是,这让我担心您期望定义会产生影响。
如果你在你的编译器定义中遗漏了所有类型的归属,fn
那么你的函数将推断出最通用的类型。这意味着您可以使用任何列表调用它来检查它的长度。这在 OCaml 中会更惯用。即,您不需要指定这p1
是一张卡片列表。该函数对任何列表都有意义。
推荐阅读
- javascript - 连接 Array.map 中的对象值
- python - 如何在 azure devops 管道中模板化 python 任务
- javascript - 单击复选框后使用 ID 砂砾模板设置 div
- apache - 如何使用 200 响应将 404 错误(和 403)重定向到 index.html
- nettopologysuite - NTS(C#) 中有关 PrecisionModel 的错误?
- python - 姜戈 | 注释要查询的对象
- java - 如果我有 String 类型,如何交换日期?爪哇
- angular - 将复选框的值分配给 FormControlName (Angular)
- javascript - 尝试导入 CSS,错误:EISDIR:对目录的非法操作,请阅读
- database - PostgreSQL 中每列的记录出现次数表