如何检查两个值是否是使用同一个构造函数创建的?

2024-01-20

假设我有

type t = A of int | B of int

let xx = A(2);;
let yy = A(3);;

我想测试 xx 和 yy 的构造函数是否相等, 是否有捷径可寻 ?而不必

match xx with
  A _ ->
  (match yy with A _ -> true | B _ -> false)
| B _ -> 
  (match yy with A _ -> false | B _ -> true);;

当一个类型有很多构造函数时,这会变得非常混乱


您可以将上面的内容重写为更简单的形式:

match xx, yy with
| A _, A _
| B _, B _ -> true
| (A _ | B _), _ -> false

但我不知道不枚举所有构造函数的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查两个值是否是使用同一个构造函数创建的? 的相关文章

  • 如何设置Emacs默认编译目录?

    我正在 Emacs 下编写 OCaml 代码 我有一个makefile在工作文件夹中 以及几个包含以下内容的子文件夹 ml文件 如果我启动M x compile and make在缓冲区上工作正常makefile 但不适用于 a 的缓冲区
  • 如何将模块与 js_of_ocaml 一起使用?

    我目前正在开发一个用 OCaml 编写并使用 js of ocaml 编译为 javascript 的网站项目 只要我使用该命令只有一个源文件 它就可以很好地工作ocamlfind ocamlc package js of ocaml pa
  • 模式匹配和 if-else 之间的性能差异

    为什么 OCaml 可以为模式匹配生成高效的机器代码 而不是为 if else 测试生成高效的机器代码 我在读 Real World OCaml 时发现this https realworldocaml org v1 en html lis
  • 在 OCaml 中的 let 命令(即 let _ = ... in)中使用下划线通配符有副作用吗?

    使用 OCaml 时 我几乎总是使用下划线通配符let exp 特别是当结果exp并不重要 重要的是里面的计算 例如 let print endline abc in let a a 1 in let do some thing in 所以
  • 如何为 OCaml 配置 _oasis 以设置“配置文件”标志

    我在 OCaml 中有一个现有项目和一个 oasis文件 我不知道在哪里启用分析标志ocamlbuild 我查了Oasis手册和代码 发现有一个变量profile在 setup data 中可用 我认为这是 Oasis 自动生成的 我应该在
  • android ndk:-fPIC 和 -pie 是互斥的吗?

    我正在使用 Android r10e NDK 为 Android 构建 Unison 文件同步可执行文件 但这并不是真正的 Android 问题 Android gt 5 0 SDK 21 要求可执行文件与位置无关 所以我 编译时将 pie
  • 尝试使用转义字符时 OCaml 正则表达式有问题

    我正在尝试使用 OCaml 为 C 的变体编写一个词法分析器 对于词法分析器 我需要匹配字符串 和 分别作为幂和或符号 这两个都是正则表达式中的特殊字符 当我尝试使用反斜杠转义它们时 没有任何变化 代码运行时就好像 仍然是行首而 仍然是 或
  • OCaml 的并行化能力状况如何?

    我对在项目中使用 OCaml 很感兴趣 但是我不确定它的并行化功能在哪里 OCaml中有消息传递能力吗 OCaml 是否能够有效地使用 1 个以上的 CPU 我读到的关于这个主题的大部分内容都是在 2002 年至 2006 年写的 我没有看
  • OCaml 中的类型共享 - 类型检查器错误

    编译这个程序时 module type Inc sig type t val inc t gt t end module type Dec sig type t val dec t gt t end module Merger I Inc
  • 如何从ocaml列表中获取子列表

    我正在查看列表文档 图书馆好像没有提供sublist功能 我正在尝试从中获取元素列表i to j 现在我必须把它写成 let rec sublist list i j if i gt j then else List nth list i
  • Ocaml 中的 Socket onread、onready、onclose 事件处理函数

    我正在 Ocaml 中使用 TCP IP 套接字开发协议 并且我有兴趣实现事件驱动方法 基本上 我想创建事件处理函数 每当套接字接收到新数据或关闭或打开时调用 是否可以在 Ocaml 中完成而无需使用多线程手动实现 Thanks 是的 制作
  • 将 OCaml 转换为 F#:将 OCaml open_box 和 close_box 转换为 F#

    我正在将几个基于 OCaml 的模块转换为 F 并遇到了 OCaml 打印格式化函数open box 和 close box http caml inria fr pub docs manual ocaml libref Format ht
  • 使用 OCaml 警告属性禁用警告 8:不详尽的匹配

    我正在尝试编写类似于以下内容的代码 let a b body 1 2 我想仅针对该模式禁用警告 8 a b 而不是为了身体或让之外的任何东西 我尝试设置警告属性来禁用警告 但以下方法都不起作用 let warning 8 a warning
  • OCaml:用消息断言

    又是另一个问题 P 我不太确定是否应该将其发布在这里或 OCaml 邮件列表上 但我首先尝试这样做 我喜欢断言语句 然而 我发现如果没有附加消息 错误消息几乎毫无用处 第 XXX 行的断言冲突 很好 但实际上出了什么问题 我认为断言的一个很
  • 使用只有一个元组值的变体类型构造函数

    type foo Foo of int int let t 1 2 Foo t Error The constructor Foo expects 2 argument s but is applied here to 1 argument
  • 如何使用 opam 安装特定版本的 ocaml 编译器

    如何使用 opam 或其他包管理器 安装特定版本的 ocaml 编译器 和兼容包 我快速浏览了 opam 文档 但没有找到相关信息 我需要 ocaml 编译器 最好是本机代码编译器 来构建 unison 一个文件同步软件 我需要使用相同版本
  • OCaml 中的线性类型

    Rust http www rust lang org 有一个线性类型系统 有什么 好的 方法可以在 OCaml 中模拟这个吗 例如 当使用 ocaml lua 时 我想确保仅当 Lua 处于特定状态 堆栈顶部的表等 时才调用某些函数 Ed
  • OCaml:为什么重命名类型会失败并显示“它们的种类不同”

    我正在为成对的类型见证和见证类型的值构建一个通用容器 我想将其用于几种不同的类型 这会给我带来错误 因为这些类型的名称都相同 所以我尝试重命名函子结果中的类型 如下所示 module type Witness sig type a key
  • 如何在 OCaml 中使协变可观察

    我正在尝试为值制作一个包装器 允许调用者自行注册以获取有关它的通知 这是一些 工作 代码 module Thing sig type a t val make a gt a t val watch a gt unit gt a t gt u
  • 如何在ocaml中将字符串转换为整数列表?

    我需要在 ocaml 中传递两个列表作为命令行参数 我使用以下代码在程序中访问它 let list1 Sys argv 1 let list2 Sys argv 2 我需要将 list1 和 list2 作为整数列表 我收到错误 该表达式的

随机推荐

  • Rails - 有两个父母的嵌套资源

    假设我有一个带有两个父模型的子模型 Event has many tickets Person has many tickets Ticket belongs to Event Ticket belongs to Person 路线已映射
  • SocketException:使用 UdpClient 打开端口时“访问被拒绝”

    我正在尝试开始侦听 Android 设备上的 UDP 端口之一 我正在使用 Xamarin Forms 并在物理 Android 手机上测试它 public void StartListening int port 13000 Listen
  • 手动更新 Carrierwave Uploader 安装的属性

    我无法在由 Carrierwave 上传程序安装的属性上使用 model update attribute SQL 语句不会接受该值并将 NULL 添加到占位符 如果我从模型类中删除 mount uploader 语句 它会正常工作 我正在
  • Angular ng-if="" 具有多个参数

    我正在尝试开始角度开发 在查看文档后 仍然存在一些问题 我怎样才能最好地写一个ng if有多个参数对应于 if a b or if a b 有可能的 span I m removed when the checkbox is uncheck
  • 等待所有的 Promise 在 Node.js 中用 Bluebird 完成

    在使用 bluebird 的 Node js 中等待所有 Promise 完成的最佳方法是什么 假设我想从数据库中选择记录并将它们存储在 redis 中 我想出了这个 loadActiveChannels function return K
  • 如何以编程方式获取父主题

    假设我在以下位置声明了以下自定义主题themes xml
  • 计算 HH:mm 格式的时差

    我有两个时间戳HH mm格式 我需要计算它们之间的差异 代表相同的时间间隔HH mm format JavaScript 有什么实用工具可以实现这一点吗 我尝试使用Date对象 但我找不到有用的东西 你能帮助我吗 您只需将两个日期相减即可
  • 将 ControlParameter 添加到 SqlDataSource 会阻止查询和数据绑定吗?

    我有一个 SqlDataSource 调用存储过程并且工作正常 如果我添加一个
  • 如何从片段中获取EditText

    我创建了AlerDialog AlertDialog Builder alert new AlertDialog Builder appContext alert setTitle Add subcontractors setView R
  • java赋值中可能存在逻辑错误的误解

    我在让这个项目正常工作方面遇到了很多问题 但我目前一直致力于让这个课程正常工作 它应该做的就是从无线电类中获取当前电台并将其传递给此类 问题是我试图在 AM 和 FM 之间进行选择 但每次运行它时 它只显示 AM 电台 我不明白为什么它会自
  • 每个RAILS_ENV运行多个delayed_job实例

    我正在开发一个具有多个 RAILS Env 的 Rails 应用程序 env name1 adapter mysql username root password host localhost database db name 1 env
  • Java 到 C# 的转换。如何在位图上绘制矩形?

    首先 我对 C 和 Java 都是菜鸟 因此 我被分配了将 java 小程序转换为 C 的任务 除了使用鼠标事件通过拖放在屏幕上绘制矩形之外 我还成功完成了所有操作 应该发生的情况是 当我单击鼠标并在屏幕上拖动鼠标时 应该会出现一个没有填充
  • 应用程序应该如何响应延迟的 SKPaymentTransaction?

    我的应用程序中有应用内购买 iOS 8 的新功能是 延迟 交易 部分描述见技术说明 https developer apple com library ios technotes tn2259 index html 我了解它的作用 并且我不
  • 让 Rails 2.3.x 忽略 i18n gem

    我有一个 Rails 2 3 5 项目 它使用 Rails 的本地化功能 我也碰巧安装了 Rails 3 beta 这取决于 i18n gem Rails 2 3 5 很乐意自行处理本地化 无需安装 i18n 但是如果 i18n gem 可
  • 如何根据物体位置旋转图像?

    首先 对帖子的长度表示抱歉 我正在开展一个根据叶子图像对植物进行分类的项目 为了减少数据的方差 我需要旋转图像 以便茎在图像底部水平对齐 270 度 到目前为止我在哪里 到目前为止 我所做的是创建一个阈值图像 然后从那里找到轮廓并在对象周围
  • 如何在预测数据上使用 Pandas get_dummies?

    使用熊猫后get dummies在 3 个分类列上获得一个热编码数据框 我训练了 取得了一些成功 感知器模型 现在我想根据新的观察来预测结果 它不是热编码的 有什么办法可以记录get dummies列映射要重新使用吗 据我所知 目前没有自动
  • 如何让一张表只允许一行?

    我有一张我想要的桌子只有一项 因此 如果有人尝试插入另一行 则只有在有人删除了先前存在的行之后才允许插入另一行 如何为这样的表设置规则 A UNIQUE约束允许多行null值 因为两个null值不被认为是相同的 除非使用时NULLS NOT
  • MATLAB:将图形打印为 pdf,如 MATLAB 中所示

    我正在尝试将图形导出 另存为 打印 为 pdf 格式 然而 无论我如何配置设置 图形周围都有很大的边距 当我将图形导出为 eps 格式时 不存在这样的问题 即图形看起来就像在 MATLAB 中显示的一样 如何将图形导出为 pdf 格式 使其
  • cmake:每个事务单元的编译统计信息

    我需要弄清楚哪些翻译单元需要重组以缩短编译时间 如何使用 cmake 掌握翻译单元的编译时间 以下属性可用于计算编译器和链接器调用的时间 规则 启动 编译 https cmake org cmake help v3 4 prop gbl R
  • 如何检查两个值是否是使用同一个构造函数创建的?

    假设我有 type t A of int B of int let xx A 2 let yy A 3 我想测试 xx 和 yy 的构造函数是否相等 是否有捷径可寻 而不必 match xx with A gt match yy with