首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的OCaml "=“运算符只应用于int?

OCaml中的"="运算符是用于比较两个值是否相等的运算符。它可以应用于不同类型的值,包括int、float、bool、char、string等基本类型,以及自定义的数据类型。

然而,对于复杂的数据类型,如列表、元组、记录等,"="运算符的行为可能会有所不同。对于这些复杂类型,"="运算符比较的是它们的结构是否相同,而不是它们的内容是否相同。这意味着即使两个列表包含相同的元素,它们的结构不同,"="运算符也会返回false。

对于自定义的数据类型,如果想要使用"="运算符比较它们的内容是否相等,需要在类型定义中重载"="运算符。可以通过在类型定义中添加=字段来实现,该字段是一个函数,用于比较两个值的内容是否相等。

总结起来,"="运算符在OCaml中可以应用于不同类型的值,但对于复杂类型需要注意其比较的是结构还是内容。如果想要比较复杂类型的内容是否相等,需要重载"="运算符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言入门基础知识1

\n"); return 0; } 释义: #include:包含头文件, 格式: 或 "header" main (主函数): 1、int(整型):函数返回值数据类型 2、main...: 函数名 3、(int argc, const char * argv[]):参数列表(一般主函数没有参数,括号内为空) a、int argc:表示主函数参数个数 1)、int(整型):参数数据类型...2)、argc:参数名 b、const char * argv[]:用于存储主函数所有参数 1)、const char * (只读字符指针):参数数据类型 2)、argv:数组名...3)、[]:数组运算符 4、{}: 语句块,用于包含所有代码逻辑 printf("Hello, World!...) 2、0 :返回数值 3、; :语句结束标识, 表示语句结束(表示这段话已说完) C语言【注释】方式 1、//:单行注释(不进行运行,只应用一行) 2、/* content */:多行注释(不进行运行

47300

如何掌握程序语言

比如 C 语言 ++ 运算符,它出现是因为 C 语言设计者们当初用计算机内存小可怜,而 "i++" 显然比"i=i+1" 少 2 个字符,所以他们觉得可以节省一些空间。...现在我们再也不缺那点内存,可是 ++ 运算符带来混乱和迷惑,却流传了下来。现在最新一些语言,也喜欢耍这种语法上小把戏。如果你追求这些小窍门,往往就抓不住精髓。 6. 针对“专门领域”。...在一次程序语言暑期班上,Cornell Robert Constable 教授讲了一个故事,说是他们用 OCaml 重新实现了一个系统,结果发现 OCaml 实现比原来 C 语言实现快了 50...经过C 语言那个小组对算法多次优化,OCaml 版本还是快好几倍。这里原因其实在于两方面。...因为你会直观看到为什么现在计算机系统会设计成这个样子:为什么处理器里面有寄存器(register),为什么需要堆栈(stack),为什么需要堆(heap),它们本质是什么。

1.2K90
  • 2017值得一瞥JavaScript相关技术趋势

    Henry Zhu在这篇文章中称述了为什么我们需要另一个压缩工具,关键点如下: 目前大部分压缩工具只能 够处理ES5代码,因此在压缩之前需要先进性编译,而Babili能够支持直接输入ES2015+。...OCaml本身和JS没啥关系,不过列表接下来两项都是基于OCaml,因此还是要先介绍下。...Facebook不少开发者都是OCaml粉丝,他们Hack、Flow以及Infer都是基于OCaml构建。...,我们再看下其对于不可变类型支持,我们使用OCaml stdlib实现不可变类型如下: module IntMap = Map.Make(struct type t = int...这个案例分析很好地阐述了从REST到GraphQL转变之路。能够想象2017年GraphQL会继续处于上升势头,不过要谈到真的大规模实施,还要到2018年吧。

    1.2K40

    如何掌握程序语言

    比如 C 语言 ++ 运算符,它出现是因为 C 语言设计者们当初用计算机内存小可怜,而 "i++" 显然比"i=i+1" 少 2 个字符,所以他们觉得可以节省一些空间。...现在我们再也不缺那点内存,可是 ++ 运算符带来混乱和迷惑,却流传了下来。现在最新一些语言,也喜欢耍这种语法上小把戏。如果你追求这些小窍门,往往就抓不住精髓。   6....在一次程序语言暑期班上,Cornell Robert Constable 教授讲了一个故事,说是他们用 OCaml 重新实现了一个系统,结果发现 OCaml 实现比原来 C 语言实现快了 50...经过C 语言那个小组对算法多次优化,OCaml 版本还是快好几倍。这里原因其实在于两方面。...因为你会直观看到为什么现在计算机系统会设计成这个样子:为什么处理器里面有寄存器(register),为什么需要堆栈(stack),为什么需要堆(heap),它们本质是什么。

    1.2K40

    老司机带你快速掌握C语言编程中存储类变量四种类型

    这意味着变量最大大小等于寄存器大小(通常是一个单词),并且不能将一元“&”运算符用于它(因为它没有内存位置)。...{ register int miles; } 该寄存器只应用于需要快速访问变量,例如计数器。还应注意,定义“寄存器”并不意味着变量将存储在寄存器中。...静态修饰符也可以应用于全局变量。完成此操作后,它会将该变量范围限制为声明它文件。 在C编程中,当静态用于全局变量时,它只会导致该成员所有对象共享该成员一个副本。...当您有多个文件并且定义了一个全局变量或函数(也将在其他文件中使用)时,extern将在另一个文件中用于提供已定义变量或函数引用。仅仅为了理解,extern用于在另一个文件中声明全局变量或函数。...执行该程序时,会产生以下结果 - count is 5 有一个微信公众号,经常会分享一些C语言/C++技术相关干货;如果你喜欢分享,可以用微信搜索“C语言学习部落”关注 欢迎大家加入千人交流答疑裙

    85420

    函数柯里化(Currying)和偏函数应用(部分应用函数)(Partial Application)比较

    感觉很多人都对函数柯里化(Currying)和偏函数应用(Partial Application)之间区别搞不清楚,尤其是在相似的上下文环境中它们同时出现时候。...在一些其它语言里,比如 Haskell 和 OCaml,所有的多参数函数都是通过柯里化实现。...下面是一个把上面的 foo 函数用 OCaml 语言写成例子: let foo = fun a -> fun b -> a * a + b * b 下面是把上面的 bar 函数用 OCaml...跟 Javascript 不一样,在 OCaml 语言里, foo 函数和 bar 函数是完全一样。我们用完全一样方式调用它们。...有些语言(例如 Haskell, OCaml)所有的多参函数都是在内部通过函数柯里化实现

    2.1K50

    前端专家聊JS语言家族新成员——R&B

    What is OCamlOCaml是ML语言家族一员。F#是微软做一个语言,F#和OCaml基本上是一样OCaml对Scala语言也有很多影响。...Infer和Flow非常相似,也是Facebook做。它可以用于推断其它静态分析工具。 Hack是加强版PHP,增加了静态类型等等。...Coq语言可以用作证明,觉得这可能是将来编程一个方向。...Why OCamlOCaml是一个历史悠久语言,它从发明到现在已经有三十年历史,已经久经考验。它规模、难度和复杂性都非常高了。 OCaml非常接近产业界,在产业界应用有很多。...所以这样特点决定了如果你要选择一个函数式语言的话,OCaml是很好选择。 OCaml默认是纯,但也可以在里面做副作用。Strict这一点是严格求值,以及它是一个静态类型

    1.5K80

    JS 代码越来越难读了 ...

    大家好,是 ConardLi。 今天来给大家介绍 JavaScript 代码一个新运算符:管道运算符 |>。...两个互相竞争提案 关于管道运算符,目前在 ES 中有两个相互竞争提案: Microsoft 提出 F# :是一种函数式编程语言,其核心基于 OCaml,这个运算符可以很方便写出柯里化风格代码。...Hack 管道运算符 下面是一个 Hack 管道运算符 |> 简单示例: 'ConardLi' |> console.log(%) // ConardLi 管道运算符 |> 左侧是一个表达式,它被计算并成为特殊变量...; 这段代码更符合我们常规编码思想,代码从左到右依次执行:f、g、h F# 管道运算符 F# 管道运算符与 Hack 管道运算符大致相似。...相反,运算符右侧函数并会直接应用于其左侧。

    1.7K10

    泛型和元编程模型:Java, Go, Rust, Swift, D等

    OCaml将这个想法更进一步,采用统一表示方式,没有需要额外装箱分配基元类型(就像Java中int需要变成Integer才能进入ArrayList一样),因为所有的对象要么已经被装箱,要么用一个指针大小整数表示...好吧,哈希表只是一个用于实现可编辑类型信息表数据结构。而且,这只是某些像CPython这样解释器工作方式。...不知道有什么语言使用这种技术,但是C++编译器和Java虚拟机在使用profile-guided优化来了解某个通用调用点主要作用于某些类型对象时,会做类似的事情。...,这也是为什么Rust可以使用同一个类型系统来支持这两种泛型原因!...其实并不知道有哪种语言泛型是这样工作,这只是在写作本文时一个想法,作为这个分类法自然延伸,这也正是希望从中得到东西!

    3.1K30

    红队技巧之F#利用

    援引微软官方解释: F # 是一种函数编程语言,可方便编写正确且可维护代码。F # 编程主要涉及如何定义自动推断和通用化类型和函数。...它是基于OCaml,而OCaml是基于ML函 数程式语言。有时F# 和 OCaml 程式是可以交互编译。...这是一个用于显示.NET在不同编程语言间互通程序设计,可以被.NET中任意其它代码编 译和调用。...至于为什么要学习F#,其实也是跟C#道理是一样,在某些特殊情况下,我们可以利用F#来达到我们目的,原常景如下: This customer really locked down their environment...但这并不意味着我们便无法在内存中运行我们F#程序,我们可以使用非托管代码方法来运行任意我们F#程序。

    1.5K30

    C++初阶 类和对象(下)

    为什么这个形参得是被类对象引用呢,直接传递这个要拷贝目标不可以吗,不是一样操作吗。..._day; } private: int _year; int _month; int _day; }; int main() { } 现在编译器很智能,直接就阻止了你无穷递归行为,为什么会发生无穷递归呢...(参数) 运算符重载既可以写在类里面,也可以写在类外面 而写在类外面我们往往会用到一个操作叫友元,这个操作大致意思就是令你这个在类外面的东西成为这个类朋友,因此你这个类外面的东西就可以访问到类中...注意: 1.不能通过连接其他符号来创建新操作符:比如operator@ 2.重载操作符必须有一个类类型参数 3.用于内置类型运算符,其含义不能改变,例如:内置整型+,不 能改变其含义 4...差不多是这样,operator++(),operator++(int)前面的就代表着前置++,后面的那个就代表着后置++,那为什么int,不能是float吗。

    16010

    Java基础 ——入坑必读

    常量全都用大写字母、单词命名,下划线常用于常量名单词分隔。...注意:这类注释只应用在声明之前,最为方便是它可以利用JDK中提供 javadoc 工具,根据注释内容自动生成HTML代码说明文档。...1.3 运算符与表达式   在这个部分呢,来谈谈感受以及重点部分,如果你是一名学生,不论是不是主修计算机专业,相信大部分学校都会开设《C语言》这门课程(顺便问一问,学怎么样啊??)...最有用莫过于运算符优先级了,这又让想起了那些“变态”题目:好多表达式 “ 掺和 ” 在一起,加上各种运算符连接,问你计算结果。...仅仅一分分值不说,最令人头大是优先级分也忒明显了,弄一会儿就绕进去了,反正是很少做对(本人不才)。后来就死记硬背了一些重点运算符优先级顺序才缓解了这样窘境。

    31930

    对象引用和对象指针

    为什么对象指针需要解引用,而对象引用就不需要 对象指针和对象引用工作方式不同。对象指针存储是对象地址,而不是对象本身。...如果你想通过引用访问该对象 x 成员,可以直接这样写: int a = ref.x; 为什么->运算符可以简化代码 -> 运算符是一种特殊运算符用于通过指针访问对象成员。...这是表格来理解 没有->运算符的话 ptr MyClass get() 0x83484 *ptr (*ptr).get() 有->运算符的话 ptr MyClass get() 0x83484...ptr->get() 所以有了运算符相当于写法上省了中间这一步 那运算符到底放在什么位置呢 有的人这样写int *a,有的人写成int* a 之所以出现差异C++是因为 C 之上添加了更强大类型系统...int *p这种,因为这样知道*p是表示一个地址

    7310

    什么是运算符重载?

    前言 本文要点: 什么是运算符重载 为什么要重载运算符 哪些运算符不可以重载 哪些运算符不建议重载 应该遵循哪些原则 如何重载运算符 什么是运算符重载 如果还不知道什么是重载,可以参考《什么是函数重载...》和《彻底理清重载函数匹配》 众所周知,运算符可直接作用于内置类型。...例如,+可以用于将整型或者浮点型相加,如果是自定义两个对象,你却不能直接进行相加,不过你可以通过重载运算符赋予这个运算符定义, 说白了,原先很多运算符只能作用于内置类型,通过重载就可以赋予它们更多含义...为什么要重载运算符 前面也已经说了,操作符重载可以让运算符用于类类型对象,而对于有些作用于对象运算符,也可以在不改变含义情况下自定义操作,那么为什么要这么做呢?...除此之外,最基本要求是,重载含义应该与运算符用于内置类型时一样含义。例如说,你不应该重载一个+,用于两个对象比较或者相减。

    1.6K20

    指针*和引用&区别使用

    引用& 首先,&不是地址运算符,而是类型标识符一种,就像*也不是指针运算符一样。 本篇偏向于&运算符。...&:可以叫它引用运算符 *:可以叫它解除指针运算符 就像char *意为指向char指针一样,int&意为指向int 引用。...栗子来一颗: int a; int &at = a; //上述声明允许将at和a互换,它们指向相同值和内存单元,就像连体婴一样。 上面这个栗子其实很有内涵在里面 为什么不写成下面这个形式呢?...可以用两种不同方式将const关键字用于指针。 int age = 20; const int * pt = &age; 该声明指出,pt指向一个const int,因此不能使用pt来修改这个值。...const. 4、函数指针 关于为什么要使用函数指针,理解还不是很深刻,毕竟功力不足。

    1.1K50

    C++ 运算符重载基本概念

    — 1 — 运算符重载需求 C++ 预定义运算符,只能用于基本数据类型运算:整型、实型、字符型、逻辑型等等,且不能用于对象运算。...但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符,使得运算符用于对象之间运算。...如:c = a + b; 等价于c = operator+(a,b) 在上面的代码中,把重载+号运算符普通函数,在Complex复数类中定义成了友元函数,目的是为了友元函数能访问对象私有成员,否则会编译报错...— 3 — 加减运算符返回值和参数表 这里还有个值得思考问题: 为什么重载-号和+号运算符函数返回类型是Complex对象而不是Complex &呢?...为什么重载-号和+号运算符函数参数表是const Complex & c常引用类型而不是Complex c呢?

    1K40

    C ++ 中不容忽视 25 个 API 错误设计!

    三法则是,如果一个类定义了析构函数、复制构造函数或复制赋值运算符,那么它应该明确定义三个函数所有,而不是依赖它们默认实现。 为什么忽略三法则是一个错误?...: “三”法则现在已转换为“五”法则,用于移动构造函数和移动赋值运算符因子。...请确保这是你API预期用例。 错误#11:在默认函数参数中公开内部值 为什么这是个问题 ? 默认参数通常用于在较新版本中扩展API,以便不会破坏API向后兼容性来增强功能。...错误#12:将#Defines用于C ++ API #defines在C代码中用于定义常量。例如: #define GRAVITY 9.8f 为什么这是一个错误?...你只应在你API中向前声明符合。此外,永远不要向前声明STL类型等等。

    1.5K20

    【003期】JavaSE面试题(三):JavaSE语法(1)

    开篇介绍 大家好,是Java面试题库提裤姐,今天这篇是JavaSE系列第三篇,主要总结了JavaSE语法中会出现相关面试题,在后续,会沿着第一篇开篇知识线路一直总结下去,做到日更!...如果能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。 Q: & 和 && 区别? &运算符有两种用法: 按位与 逻辑与 &&运算符是短路与运算。...注意:逻辑或运算符(|)和短路或运算符(||)差别也是如此。 Q: == 和 equals 区别?...== 与equals 主要区别是: equals 和== 最大区别是一个是方法,一个是运算符 == 常用于比较原生类型,而 equals() 用来比较方法两个对象内容是否相等。...Q: 为什么重写 equals时必须重写 hashCode 方法?

    38600
    领券