首页 > 其他分享 >OCaml入门-类型

OCaml入门-类型

时间:2024-01-24 21:57:17浏览次数:26  
标签:Blue 入门 int OCaml 类型 type Red string

OCaml有如下基本类型

OCaml type  Range

int         63-bit signed int on 64-bit processors, or 31-bit signed int on
            32-bit processors
float       IEEE double-precision floating point, equivalent to C's double
bool        A boolean, written either 'true' or 'false'
char        An 8-bit character
string      A string (sequence of 8 bit chars)
  • OCaml 是一种强静态类型语言。这意味着每个表达式都有 一种类型,并且只有一种类型,它是在程序运行之前确定的

  • OCaml 使用类型推断来计算(推断)类型

  • OCaml 不执行任何类型的隐式转换

对于参数比较复杂的情况,OCaml提供了模式匹配简化函数体,对于下面的这个阶乘函数

# let rec factorial n =
    if n <= 1 then 1 else n * factorial (n - 1);;
val factorial : int -> int = <fun>

可以改写成,此处 _ 代表与其他任何内容均匹配的模式

# let rec factorial n =
    match n with
    | 0 | 1 -> 1
    | _ -> n * factorial (n - 1);;
val factorial : int -> int = <fun>

或者使用语法糖 function 直接模式匹配

# let rec factorial = function
    | 0 | 1 -> 1
    | n -> n * factorial (n - 1);;
val factorial : int -> int = <fun>

好神奇的类型推断

列表是一种常见的复合数据类型

[[1; 2]; [3; 4]; [5; 6]];;
- : int list list = [[1; 2]; [3; 4]; [5; 6]]

:: 用于单个元素和列表的复合,@ 用于列表和列表的复合

1 :: [2; 3] @ [5; 6];;
- : int list = [1; 2; 3; 5; 6]

还有两种方法定义复合数据类型

  • 元组 tuples
# let t = (1, "one", '1');;
val t : int * string * char = (1, "one", '1')
  • 记录 records
# type person =
    {first_name : string;
     surname : string;
     age : int};;
type person = { first_name : string; surname : string; age : int; }

OCaml 同样支持自定义类型,使用 type

# type colour = Red | Blue | Green | Yellow;;
type colour = Red | Blue | Green | Yellow
# let l = [Red; Blue; Red];;
val l : colour list = [Red; Blue; Red]

使用 of * 来在自定义类型中内嵌元组

# type colour =
    | Red
    | Blue
    | Green
    | Yellow
    | RGB of int * int * int;;
type colour = Red | Blue | Green | Yellow | RGB of int * int * int
# let l = [Red; Blue; RGB (30, 255, 154)];;
val l : colour list = [Red; Blue; RGB (30, 255, 154)]

自定义类型也可以是多态递归的,比如按如下方式可以定义一颗二叉树

# type tree =
Leaf of int
| Node of tree * tree;;
type tree = Leaf of int | Node of tree * tree

标签:Blue,入门,int,OCaml,类型,type,Red,string
From: https://www.cnblogs.com/sysss-blogs/p/17985795

相关文章

  • SQL入门
    SQL入门基础结构primarykey(主键)橙色foreignkey(外键)绿色创建资料库CREATEDATABASE`sql_tutorial`;--创建资料库SHOWDATABASES;--查看资料库DROPDATABASE`sql_tutorial`;--删除资料库创建表格--数据类型INT--整数DECIMAL(3,2)--有小数......
  • DataFrame的入门操作-DSL
          ......
  • Oracle数据类型的简单学习之一
    Oracle数据类型的简单学习之一背景因为信创安可替代的发展有很多项目提到了数据库切换到国产数据库的要求.一般情况是要求从Oracle/SQLServer迁移到国产的:达梦/瀚高/人大金仓/南大通用等数据库.但是因为Oracle作为数据库领域No.1的存在他对SQL的规范标准支持的并不......
  • ROS2编程入门
    步骤:1.创建功能包;2.编辑源文件;3.编辑配置文件;4.编译;5.执行mkdir创建 colconbuild#编译一.创建功能包在终端创建C++功能包ros2pkgcreate<name>--build-typeament_cmake--dependenciesrclcpp--node-name<name>二.编辑源文件用vscode编写文件内容importrclp......
  • 【C++入门到精通】C++入门 —— 深浅拷贝函数
     目录拷贝函数浅拷贝拷贝构造函数深拷贝拷贝构造函数总结 前言Linux专栏链接)大家可以关注一下,后面我会一点一点的更新的。大家坐稳扶好,要开车了!!!拷贝函数拷贝构造详细介绍)        是C++中的一个特殊成员函数,用于创建对象的副本。它的作用是通过使用已有对象的属性值来初始......
  • 【C++入门到精通】C++入门 —— 深浅拷贝函数
     目录拷贝函数浅拷贝拷贝构造函数深拷贝拷贝构造函数总结 前言Linux专栏链接)大家可以关注一下,后面我会一点一点的更新的。大家坐稳扶好,要开车了!!!拷贝函数拷贝构造详细介绍)        是C++中的一个特殊成员函数,用于创建对象的副本。它的作用是通过使用已有对象的属性值来初始......
  • Wayland入门
    概述Wayland是一个用于构建显示服务器和客户端应用程序的通信协议和库。它旨在取代XWindowSystem(X11)作为Linux和其他操作系统上的图形显示系统。相对于X11,Wayland设计更为简单、现代化,并具有更好的性能和安全性。它采用了一种更直接的通信模型,通过消息传递机制进行客户......
  • 获取猜你喜欢数据,类型定义和列表渲染
    1.封装获取猜你喜欢数据API2.组件挂载完毕调用API这个是接口文档:  下面: 组件内部获取数据,我们其他的都是在index.vue里面获取的: 我们来看一下数据,可以看到数据很多(items商品信息): 定义数据类型: 这里的分页我们其他地方也会用到,因此我们把他定义成一个通用的类......
  • 用Java实现冒泡排序:实用教程带你入门
    在处理一些特定系统功能时,经常需要使用冒泡排序。例如,在一个电子商务网站中,需要对商品进行排序和过滤。这个时候可以使用冒泡排序对商品进行排序,以便用户能够按照价格、销量、评分等不同字段进行排序。通过使用冒泡排序,系统可以提供更加灵活和个性化的排序选项,以便用户能够更加方便......
  • Meson 入门指南之一
    相关站点Meson官网Meson官方文档MesonGitHub项目Meson介绍Meson的简介Meson(TheMesonBuildSystem)是个项目构建系统,类似的构建系统有Makefile、CMake、automake…。Meson是一个由Python实现的开源项目,其思想是,开发人员花费在构建调试上的每一秒都是浪费,同样......